我正在学习Michael的ruby on rails教程,我不明白他如何在if condintion中使用赋值操作符:
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
end谁能解释一下背后的逻辑吗?
发布于 2016-08-30 18:57:20
这是Ruby中的语法糖之一。
Ruby允许您在条件变量中赋值并返回值。
x = true #=> returns true
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
end等于
user_id = session[:user_id]
if user_id
@current_user ||= User.find_by(id: user_id)
end给你留了一条线。如果session[:user_id]是falsy的话,它会将假值分配给user_id,而不执行块。
发布于 2016-08-30 18:55:30
允许在if语句中使用赋值运算符,因为赋值是表达式。赋值表达式的结果是要分配的值。
在这种情况下,如果session[:user_id]不是nil或false,则将调用if分支的结果,并将user_id设置为session[:user_id]的结果。如果session[:user_id]是nil或false,它仍然会被分配给user_id,但是if内部的逻辑不会计算。
发布于 2016-08-30 18:56:15
这相当于这样做:
user_id = session[:user_id]
if user_id
@current_user ||= User.find_by(id: user_id)
endhttps://stackoverflow.com/questions/39235038
复制相似问题