刘华佼的全栈学习记录

5-10 "||="是什么东东?

| Comments

教材5-4 Step 3: 购物车设计 Part 2中说:

a ||= b 等于 a = a || b。意思是如果 a 是 nil 的话。 a 会被赋予 b 值。
……
所以
  def current_cart
    @current_cart ||= find_cart
  end
意思就是 @current_cart 是 nil 时会呼叫 find_cart 这个函式去判断消费者现在使用的是哪一台车。

但是我搜到的What Ruby’s ||= (Double Pipe / Or Equals) Really Does中说,

A common misconception is that a ||= b is equivalent to a = a || b, but it behaves like a || a = b
(翻译:一个常见的误解是a ||= b 相当于a = a || b,实际上它更像是a || a = b。)

他说:

a = nil
b = 20
a ||= b
a        # => 20

在这个例子里,a ||= b 确实很像 a = a || b.

但后面他例举比较了这三种用法在hash、数组、method中的不同,得出结论a ||= b 更像是a || a = b。我通篇阅读下来,没有明白所以然,可能因为不太懂hash数组和method。

但就单个变量来说,a ||= b ,a = a || b,a || a = b结果都一样的。决定不深入研究啦!就理解为,只要a为nil或者false,就取b的值!

参考资料

What does ||= (or-equals) mean in Ruby?
When do we use the “||=” operator in Rails ? What is its significance? [duplicate]

The curious case of the Ruby T-Square operator.
Ruby中“||=”符号理解

Comments

comments powered by Disqus