在Ruby Equal OR运算符(|| =)中为什么OR在相等之前?

时间:2017-03-11 19:40:25

标签: ruby-on-rails ruby

这对我来说并不合乎逻辑。假设您正在做这样的事情:

@current_user ||= User.find_by(id: :session[:user_id])

在我看来,检查@current_user是否为零是合乎逻辑的。然后,如果它是零OR操作。

那么为什么这个用ruby写成||=而不是=||

同样的事情:

x += 1

1 个答案:

答案 0 :(得分:6)

Ruby认为

是一个常见的误解
@current_user ||= User.find_by(id: :session[:user_id])

扩展为

@current_user = @current_user || User.find_by(id: session[:user_id])

但是,Ruby实际上将表达式扩展为

@current_user || @current_user = User.find_by(id: session[:user_id])

利用||短路仅在未设置时分配@current_user变量。