我有以下代码:
via = reminders_array[i]['value']['bot-input-keyword'] unless reminders_array[i]['value']['via'].nil?
和
collection = json_element['COLLECTION']['$'] unless json_element['COLLECTION'].nil?
当我搜索示例时,我看到人们使用||=
但我无法理解它的用法,尤其是在第二种情况下。
答案 0 :(得分:0)
考虑以下陈述:
e #=> NameError: undefined local variable or method `e'...
if false
e = 7
end
e #=> nil
f #=> NameError: undefined local variable or method `f'
f = 7 if false
f #=> nil
如您所见,如果寻求局部变量(e
或f
)的值,但是如果变量首先出现在语句中但未赋值,则Ruby会引发异常,Ruby将其值设置为nil
。我们看到了:
a = b unless c.nil?
与:
相同a = b if c
与:
相同a = (c ? b : nil)
与:
相同a = c && b
要了解最后一个表达式与前两个表达式相同的原因,让我们尝试几个例子,包括:
b = 4
c = 2
c && b #=> (2 && 4) => 4
c = nil
c && b #=> (nil && 4) => nil
所以我相信你想要:
via = reminders_array[i]['value']['via'] &&
reminders_array[i]['value']['bot-input-keyword']
你问过||=
。 a ||= b
是的简写:
a = a || b
当Ruby看到a ||= b
时,她会在做任何其他事情之前将其转换为a = a || b
。
另外两个示例,b
仍然等于4
:
a = 2
a ||= 4 #=> a=(a || 4) => a=(2 || 4) #=> 2
a = nil
a ||= 4 #=> a=(a || 4) => a=(nil || 4) #=> nil
因此如果a
为nil
,则a
仍为nil
;其他a
设置为b
。
||=
的常见用法是:
a = nil
(a ||= []) << 4
#=> [4]
(a ||= []) << 6
#=> [4,6]
在第一个实例中,a
为nil
,因此a ||= []
会将a
转换为空数组,并附加4
。在第二种情况下,a
([4]
)不是nil
,因此a ||= []
使a
保持不变([4]
)。然后将6
附加到a
,制作a
[4,6]
。
除了||=
之外还有:
a &&= b #=> a = a && b
a += b #=> a = a + b
a *= b #=> a = a * b
和其他人。关于a && b
的一句话。如果a
为nil
,则a && b
为nil
。如果a
不是nil
,则a && b
是b
。