nil || false
返回false
,false || nil
返回nil
。有人对此有解释吗?
答案 0 :(得分:17)
在Ruby中,一切都是表达式,表达式将返回其中评估的最后一个值。
对于这两个示例,||
表达式的左侧评估为假值,因此Ruby然后评估右侧,并返回它。
答案 1 :(得分:4)
正如其他人指出的那样,||
首先评估左边的表达式。如果它是“true”(除false
或nil
之外的任何内容),则返回该值。否则,它会评估右侧的表达式,并返回它(无论它是什么)。
这使得||
不仅仅是布尔测试有用。例如,我在前几天为chronic
gem编写代码时使用它:
@now = options[:now] || Chronic.time_class.now
这意味着:“如果options
哈希值包含:now
值,请将其存储在@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
答案 2 :(得分:3)
||
返回最后一个表达式的结果。如果它评估LHS并找到true
值,则获得LHS;否则,你得到RHS(无论RHS是什么)。