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