Ruby测试和赋值变量
基于我在Ruby中读到的关于||=
运算符的内容,我希望下面的代码行应该将示例中的变量a
(一个尚未分配的变量)分配给5
。
a |= "-----n-".index /n/
只评估"-----n-".index /n/
自己给你5
。
但是,在执行上面的行之后, a
被设置为true
。
以下将b
设置为false
,而我希望b
应该为nil
:
b |= "-----n-".index /o/
你能解释一下吗?
发生这种情况是因为a |= expr
被置于a = a | expr
a = a | expr
。 在右侧, a
最初nil
。
该表达式相当于a = nil | expr
a = nil | expr
,如果参数为非nil,则返回true(有关详细信息,请参阅nil#|的文档 )。 你可能想要编写a ||= expr
,它是a = a || expr
a = a || expr
。
||=
和|=
是不同的运算符。 你谈论一个,但使用另一个。 请注意!
a ||= "-----n-".index(/n/) # => 5 b ||= "-----n-".index(/o/) # => nil c |= "-----n-".index(/n/) # => true d |= "-----n-".index(/o/) # => false