Ruby if 与 ||=的优先级

xiaoronglv · 2012年10月12日 · 最后由 woaigithub 回复于 2012年10月19日 · 2650 次阅读
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end

如果写成 if else 语句,是不是这样?

def current_user

if session[:user_id]
@current_user ||= User.find(session[:user_id]) 
else 
return nil
end

有没有官方的文档,||=这种符号在 google 中不好搜索,没找到。

def current_user
   @current_user ||= User.find(session[:user_id]) 
end

这样你就不纠结了。

是的。

匿名 #3 2012年10月12日

直接 find 会出异常的,用的地方得捕获起来

#2 楼 @zgm 看来 if 的条件语句比符号的优先级高,thanks。

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

不抛异常版本

我理解的意思是 或者=

#7 楼 @lanqishao 不能这么理解吧。

||的左侧如果为 false,就会执行右侧。他是优雅版本的 if else。

优先级这种东西,有时候是不靠谱的,最好使用括号分隔,这样明显,给谁都能读懂了,要是别人维护你的代码,或者你维护别人的代码,其实大家很多时候都很难分清优先级的,用个括号又能怎么样呢? 如果太长了,还可以分隔出变量,然后再用变量进行逻辑运算。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号