根据我已阅读的有关Ruby中||=
运算符的内容,我预计下面的代码行应将示例中的变量a
(尚未分配的变量)分配给5
。红宝石测试和赋值变量
a |= "-----n-".index /n/
只是评估"-----n-".index /n/
自身给你5
。
然而,执行上述行之后,a
设为true
。
下套b
到false
,而我预计b
应该nil
:
b |= "-----n-".index /o/
能否请你这个解释一下吗?
根据我已阅读的有关Ruby中||=
运算符的内容,我预计下面的代码行应将示例中的变量a
(尚未分配的变量)分配给5
。红宝石测试和赋值变量
a |= "-----n-".index /n/
只是评估"-----n-".index /n/
自身给你5
。
然而,执行上述行之后,a
设为true
。
下套b
到false
,而我预计b
应该nil
:
b |= "-----n-".index /o/
能否请你这个解释一下吗?
||=
和|=
是不同的运营商。你谈论一个,但使用另一个。请注意!
a ||= "-----n-".index(/n/) # => 5
b ||= "-----n-".index(/o/) # => nil
c |= "-----n-".index(/n/) # => true
d |= "-----n-".index(/o/) # => false
这是因为a |= expr
被脱到a = a | expr
。在右侧,a
最初是nil
。
该表达式相当于a = nil | expr
,如果参数非零(参见documentation on nil#|了解详细信息),则返回true。你可能打算写a ||= expr
这是desugared a = a || expr
。
对不起,我犯了一个错误,我们之间的混淆| =和|| =。嗯,我确实看到它的作用。 – mydoghasworms 2013-03-22 05:50:23
'a || = expr' **不是同一个**,因为'a = a || expr'。它有时与'a ||相同a = expr',但并非总是如此。请参阅http://stackoverflow.com/a/2505285/421705 – 2013-03-22 08:43:55
'|'是按位* *'或'运营商,而''||是*逻辑*'或'运营商。另一方面,'|| ='不是一个操作符。解析器会看到'a || = b'并将其视为'a = a || B'。你可以专注于'||'或'|'。 – oldergod 2013-03-22 05:06:13
这是他的错误,是的。但是为什么按位OR在应用于未定义的变量时返回布尔值 - 这是一个难题! – 2013-03-22 05:08:00
@SergioTulentsev它不是未定义的。解析器设置为'nil'所有'var = anything'变量。 – oldergod 2013-03-22 05:08:44