4

我是红宝石的新手。

||和 和有什么不一样||=

>> a = 6 || 4
=> 6
>> a ||= 6
=> 6

听起来他们是一样的。

4

5 回答 5

4

||=仅当左侧值为 false 时,才会将左侧值设置为右侧值。

在这种情况下,6 和 4 都是真值,因此a = 6 || 4将设置a为第一个真值,即6

a ||= 6仅当为 false时才会设置a为 6 a。也就是说,如果它是 nil 或 false。

a = nil
a ||= 6
a ||= 4
a # => 6
于 2013-07-04T04:11:33.490 回答
4

x ||= y表示如果 x 为null 或 undefined 或 false ,则赋值y给;这是一个捷径。xx = 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
于 2013-07-04T04:17:36.220 回答
3

a ||= 6 如果尚未分配,则仅分配 6。(实际上,假的,正如克里斯所说)

a = 4
一个 ||= 6
=> 4

a = 4 || 6
=> 4
于 2013-07-04T04:11:51.213 回答
2

您可以扩展a ||= 6

a || a = 6

所以你可以看到它使用aif ais not nilor false,否则它将赋值a并返回该值。这通常用于值的记忆。

更新

感谢第一条评论指出||=(或等于)运算符的真正扩展。我学到了一些新东西,并找到了这篇有趣的帖子来讨论它。http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case

于 2013-07-04T04:15:10.643 回答
1

两个表达式都a = 6 || 4返回a ||= 6相同的结果,但不同之处在于||=如果该变量为 nil 或 false,则将值分配给变量。

于 2013-07-04T04:15:15.650 回答