零|| 假和假|| 在ruby中没有
nil || false
nil || false
返回false
和false || nil
false || nil
返回nil
。 有没有人对此有解释?
在Ruby中,一切都是表达式,表达式将返回在其中计算的最后一个值。
对于您的两个示例, ||
的左侧 表达式计算为一个假值,因此Ruby然后评估右侧,并返回它。
正如其他人指出的那样, ||
首先评估左边的表达式。 如果它是“true”(除了false
或nil
之外的任何东西),它返回它。 否则,它会评估右侧的表达式,并返回它(无论它是什么)。
这使得||
比布尔测试更有用。 例如,我在前几天为chronic
gem编写代码时使用它:
@now = options[:now] || Chronic.time_class.now
这意味着:“如果options
哈希包含:now
值, @now
存储在@now
。否则,将Chronic.time_class.now
作为默认值返回Chronic.time_class.now
”。 我相信你可以在你自己的程序中想到很多可能的应用程序。
&&
是类似的:它首先计算左边的表达式,如果它的计算结果为false
或nil
,则返回它。 否则,它会评估右侧的表达式,并返回它(无论它是什么)。
这意味着&&
除了布尔测试之外还有很多用处。 您可以使用它将两行代码压缩成一行。 例如:
do_something && do_something_else
(只有当你知道do_something
的返回值永远不会为false
或nil
时才有效!)
您还可以使用&&
在与“守卫”相同的行上挤压“守卫”表达式:
message && send_message(message)
哪个可以取代:
unless message.nil? send_message(message) end
||
返回最后一个表达式的结果。 如果它评估LHS并找到true
值,则得到LHS; 否则,您将获得RHS(无论RHS可能是什么)。