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