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

我是Ruby的新手。

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

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

听起来他们是一样的。

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

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

只有当a为假时, a ||= 6才会将a设置为6。 也就是说,如果它是零或假。

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

x ||= y表示如果x为null或未定义或为false ,则将x ||= y分配给x ; 它是x = y unless 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 

with =||

 y = 2 x ||= y x # => 2 n = nil m = 2 n ||= m m # => 2 

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

 a = 4
 a || = 6
 => 4

 a = 4 ||  6
 => 4

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

 a || a = 6 

所以你可以看到它使用if a不是nilfalse ,否则它会为a赋值并返回该值。 这通常用于值的记忆。

更新

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

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