Ruby测试和赋值变量

时间:2013-03-22 05:00:03

标签: ruby

基于我在Ruby中读到的关于||=运算符的内容,我希望以下代码行应该将示例中的变量a(一个尚未分配的变量)分配给{ {1}}。

5

仅仅评估a |= "-----n-".index /n/ 会给你"-----n-".index /n/

但是,执行上述行后,5设置为a

以下内容将true设置为b,而我希望false应为b

nil

你可以向我解释一下吗?

2 个答案:

答案 0 :(得分:2)

这是因为a |= expra = a | expr所取代。在右侧,a最初为nil

该表达式等同于a = nil | expr,如果参数为非零,则返回true(有关详细信息,请参阅documentation on nil#|)。你可能打算写a ||= expr,这是a = a || expr

答案 1 :(得分:1)

||=|=是不同的运营商。你谈论一个,但使用另一个。注意!

a ||= "-----n-".index(/n/) # => 5
b ||= "-----n-".index(/o/) # => nil

c |= "-----n-".index(/n/) # => true
d |= "-----n-".index(/o/) # => false