条件三态逻辑

保罗

我有一个从三态布尔值中取值的变量:

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是否有其他(正确)的方法来进行调节?

阿列克谢·马蒂什金(Alexei Matiushkin)

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 === falsetrue === true可能满足IDEA又名的RubyMine以及:

if asap === false
  puts 'False'
end

UPD3:正如@sawa在评论中提到的,IDEA在这里是错误的,因为它的nil == false计算结果为false,因此== false通常不等于unless

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章