什么是|| =是什么意思?

pka*_*pka 8 ruby

我的应用程序控制器中有一个受保护的方法

def current_user
  @current_user ||= User.find_by_id(session[:user_id])
end
Run Code Online (Sandbox Code Playgroud)

我想知道是什么||=意思?我一直试图搜索并找出答案,但无济于事.

Rom*_*ain 11

基本上,a ||= b手段assign b to a if a is null or undefined or false (i.e. false-ish value in ruby),它是一个捷径a = b unless a.

  • 它不是“a = b,除非a”。请参阅 http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html 以更好地了解它的实际工作原理。 (2认同)
  • 它与“a = b except a”不同。`a ||= b` 总是返回 `a` (如果适用的话,在赋值之后),而如果 `a` 为 true,则 `a = b except a` 返回 `nil`。这是一个非常重要的区别,因为这种机制通常用于缓存繁重的操作。 (2认同)

m-s*_*arp 5

||= 是一个 Ruby 习惯用法。这意味着如果 @current_user 为 nil (或 false),则尝试通过 id 找到它并将其分配给 @current_user,否则不执行任何操作。

请参阅这些相关 问题