||之间的区别 和|| =?
我是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
不是nil
或false
,否则它会为a
赋值并返回该值。 这通常用于值的记忆。
更新
感谢第一条评论指出||=
(或等于)运算符的真正扩展。 我学到了一些新的东西,发现了这篇有趣的post。 http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case
两个表达式a = 6 || 4
a = 6 || 4
和a ||= 6
返回相同的结果,但区别在于||=
如果此变量为nil或false,则赋值给变量。