【发布时间】:2013-07-01 22:54:27
【问题描述】:
我是 Ruby 新手。
|| 和 ||= 有什么区别?
>> a = 6 || 4
=> 6
>> a ||= 6
=> 6
听起来他们是一样的。
【问题讨论】:
-
不是来自 Ruby,但
||=可能类似于+= -
||=与+=非常不同。
标签: ruby
我是 Ruby 新手。
|| 和 ||= 有什么区别?
>> a = 6 || 4
=> 6
>> a ||= 6
=> 6
听起来他们是一样的。
【问题讨论】:
||= 可能类似于 +=
||= 与 += 非常不同。
标签: ruby
您可以将a ||= 6扩展为
a || a = 6
所以你可以看到如果a不是nil或false,它使用a,否则它会将值分配给a并返回该值。这通常用于值的记忆。
更新
感谢第一条评论指出||=(或等于)运算符的真正扩展。我学到了一些新东西,并找到了这篇有趣的帖子来讨论它。 http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case
【讨论】:
a || a = 6
x ||= y表示如果 x 为 null 或 undefined 或 false ,则将y分配给x;这是x = y unless x的快捷方式。对于 Ruby 短路运算符
||,如果左操作数为真,则不计算右操作数。
现在我在||= 上面的几行中提供了一些快速示例:
当 x 未定义且 n 为 nil:
unless
y = 2
x = y unless x
x # => 2
n = nil
m = 2
n = m unless n
m # => 2
=||
y = 2
x ||= y
x # => 2
n = nil
m = 2
n ||= m
m # => 2
【讨论】:
a = 6 || 4 和 a ||= 6 两个表达式都返回相同的结果,但区别在于,||= 会在变量为 nil 或 false 时为变量赋值。
【讨论】:
a ||= 6 仅在尚未分配的情况下分配 6。 (实际上,正如克里斯所说,虚假)
a = 4 一个 ||= 6 => 4 a = 4 || 6 => 4【讨论】:
||= 仅当左侧值为 false 时,才会将左侧值设置为右侧值。
在这种情况下,6 和 4 都是真值,所以a = 6 || 4 会将a 设置为第一个真值,即6。
仅当a 为假时,a ||= 6 才会将 a 设置为 6。也就是说,如果它是 nil 或 false。
a = nil
a ||= 6
a ||= 4
a # => 6
【讨论】:
||= 定义以前未定义的变量。