我有一个从三态布尔值中取值的变量:
asap = true
asap = false
asap = nil
Ruby的条件句将其解释为真实或错误。特别是,nil
不能与区别false
。
asap = nil
unless asap
puts 'False'
end
# => 'False'
声明区分false
来自nil
是:
if asap == false
puts 'False'
end
但是RubyMine 6.3.3抱怨该表达式可以简化,并建议使用unless asap
。是否有其他(正确)的方法来进行调节?
TLDNR;
if FalseClass === asap
puts 'False'
end
三态通常建议存在三个可能的分支,这迫使我认为if
三元和三元都不?
适用。
puts case asap
when FalseClass then 'False'
when TrueClass then 'True'
when NilClass then 'Nil'
else 'You are kidding on me, aren’t you?'
end
希望能帮助到你。
UPD:我考虑得越多,就越倾向于认为三元关系也很好:
puts asap.nil? ? 'Nil' : asap ? 'True' : 'False'
UPD2:实际上,三等于对比运算符,它是透明的中使用case
和这显然评估为true
用于false === false
和true === true
可能满足IDEA又名的RubyMine以及:
if asap === false
puts 'False'
end
UPD3:正如@sawa在评论中提到的,IDEA在这里是错误的,因为它的nil == false
计算结果为false
,因此== false
通常不等于unless
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句