string = "test"
suitable_inventories = [1, 2, 3]
inventories ||= string.empty? ? suitable_inventories : []
inventories
基于我对Ruby的理解,我期待上面的代码产生:
[]
相反,它正在返回:
[1, 2, 3]
我是否误解了||=
的工作原理?
答案 0 :(得分:4)
||=
是一项有条件的作业。以下两个基本相同:
foo ||= 42
bar = 42 unless bar
换句话说,只有当变量将||=
或nil
作为值ATM时,false
才会执行分配。由于某些特殊性,这也意味着没有分配值的变量。
因此,如果inventories
已经拥有某个数组,则不会使用||=
重新分配新数组。
答案 1 :(得分:3)
a ||= b
表示a || a = b
,即
nil
或false
),那么使用a
运算符||
保持不变
a
将为false或nil,导致在||
之后执行第二部分表达式,即a=b
在您的情况下,inventories
必须已经分配(而不是nil
),这就是为什么它不是[]
inventories ||= string.empty? ? suitable_inventories : []
相当于:
inventories || inventories = string.empty? ? suitable_inventories : []