【发布时间】:2014-03-28 23:30:46
【问题描述】:
假设我有类似的东西
true && true #=> true
这是有道理的,所以我尝试了类似的方法:
true && "dsfdsf" #=> "dsfdsf"
这让我感到惊讶,因为我经常会做类似if something && something 的事情,我一直认为这是评估为真并且会返回真。进一步的实验,例如:
jruby-1.7.3 :009 > "ad" && "dsf"
=> "dsf"
jruby-1.7.3 :010 > "ad" && "sdfd" && nil
=> nil
jruby-1.7.3 :011 > "ad" && nil && "sdf"
=> nil
让 Ruby 看起来要么返回最后一个值(如果全部为真),要么返回它找到的第一个假值。为什么这样做?这是一个正确的心智模型吗?
【问题讨论】:
-
这是逻辑上相同的行为。价值观本身已经是真假。为什么逻辑运算符不应该直接返回它们而不必返回单独的布尔类型?
标签: ruby truthiness