零|| 假和假|| 在ruby中没有

nil || false nil || false返回falsefalse || nil false || nil返回nil 。 有没有人对此有解释?

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

对于您的两个示例, ||的左侧 表达式计算为一个假值,因此Ruby然后评估右侧,并返回它。

正如其他人指出的那样, || 首先评估左边的表达式。 如果它是“true”(除了falsenil之外的任何东西),它返回它。 否则,它会评估右侧的表达式,并返回它(无论它是什么)。

这使得|| 比布尔测试更有用。 例如,我在前几天为chronicgem编写代码时使用它:

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

这意味着:“如果options哈希包含:now值, @now存储在@now 。否则,将Chronic.time_class.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 

|| 返回最后一个表达式的结果。 如果它评估LHS并找到true值,则得到LHS; 否则,您将获得RHS(无论RHS可能是什么)。