零|| 假和假|| 零在红宝石(nil || false and false || nil i

2019-08-01 02:36发布

nil || false nil || false返回falsefalse || nil false || nil返回nil 。 有没有人有这样的解释?

Answer 1:

在Ruby中,一切都是表达式,以及表达式,将返回在它最后计算的值。

对于这你的例子,的左侧|| 表达式计算为一个falsy值,因此Ruby然后评估右侧,并将其返回。



Answer 2:

正如有人指出, || 首先评估左侧的表达。 如果是“真”(除任何falsenil ),它返回。 否则,计算右侧的表达式,并返回它(不管它是什么)。

这使得|| 的不仅仅是布尔测试多了不少有用的。 举例来说,我只是写了一些代码时使用它的一天chronic宝石:

@now = options[:now] || Chronic.time_class.now

这意味着:“如果options哈希包括:now值,存储在@now 。否则,依傍Chronic.time_class.now作为默认”。 我相信你能想到很多在自己的程序可以应用的。

&&是类似的:它首先计算在左边的表达,并且如果它的计算结果为falsenil ,它返回。 否则,计算右侧的表达式,并返回它(不管它是什么)。

这意味着&& 也是不仅仅是布尔测试多了不少有用的。 你可以用它来的两行代码挤入之一。 例如:

do_something && do_something_else

(这只有当你知道的返回值工作do_something永远不会falsenil !)

您还可以使用&&挤在同一行,因为它是“守着”什么是“后卫”的表达:

message && send_message(message)

可以代替:

unless message.nil?
  send_message(message)
end


Answer 3:

|| 返回最后计算的表达式的结果。 如果评估LHS并找到true价值,你得到的LHS; 否则,你得到的RHS(不管是什么RHS可能)。



文章来源: nil || false and false || nil in ruby
标签: ruby null