这对我来说并不合乎逻辑。假设您正在做这样的事情:
@current_user ||= User.find_by(id: :session[:user_id])
在我看来,检查@current_user
是否为零是合乎逻辑的。然后,如果它是零OR
操作。
那么为什么这个用ruby写成||=
而不是=||
?
同样的事情:
x += 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
变量。