如何在不使用nilcheck的情况下将nil值转换为true

时间:2018-07-31 21:04:35

标签: ruby

我有一个变量val,可以是niltruefalse。我正在编写方法convert,该方法将转换输入val并根据val返回以下值:

  • true-> true
  • false-> false
  • nil-> true

我可以通过nil检查来做到这一点,

def convert
  val.nil? ? true : val
end

如何在没有nil check的情况下进行转换?

2 个答案:

答案 0 :(得分:7)

如果唯一可能的值为truefalsenil,我可能会建议

def convert
  val != false
end

尽管公平地说,这违反了您提到的该准则的精神。拥有可以是nil 布尔值的值确实感觉像某种三态类型,将其更好地分解为一组更好命名的常量,甚至只是符号。

答案 1 :(得分:3)

另一种方式:

def convert(val)
  [true, nil].include?(val)
end

输出:

> convert(true)
#=> true 
> convert(nil)
#=> true 
> convert(false)
#=> false