||之间的区别和|| =?

时间:2013-07-04 04:09:28

标签: ruby

我是Ruby的新手。

||||=之间有什么区别?

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

听起来他们是一样的。

5 个答案:

答案 0 :(得分:4)

仅当左侧值为false时,

||=才会将左侧值设置为右侧值。

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

仅当a ||= 6为假时,

a才会将a设置为6。也就是说,如果它是零或假。

a = nil
a ||= 6
a ||= 4
a # => 6

答案 1 :(得分:4)

  

x ||= y表示如果x null或未定义或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

答案 2 :(得分:3)

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

a = 4
a ||= 6
=> 4

a = 4 || 6
=> 4

答案 3 :(得分:2)

您可以将a ||= 6展开为

a || a = 6

因此,如果a不是anil,您可以看到它使用false,否则它会将值分配给a并返回该值。这通常用于值的记忆。

<强>更新

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

答案 4 :(得分:1)

表达式a = 6 || 4a ||= 6都返回相同的结果,但区别在于||=如果此变量为nil或false,则为变量赋值。