根据this栈的问题,“和”与“&&”运营商在轨
and
is the same as&&
but with lower precedence
我理解这一点。我相信这个问题与上述问题不重复。
在我的控制器执行以下代码时:
user = user_email.present? && User.find_by(email: user_email)
user
变量保存active record object
为User
模型。因此执行user.valid_password? user_password
没有发生错误,测试成功通过。
但是,当我试图用and
代替&&
时,结果令人惊讶。
当我试着用下面的代码:
user = user_email.present? and User.find_by(email: user_email)
user
变量保存boolean
价值,从而执行user.valid_password? user_password
了以下错误:
undefined method `valid_password?' for true:TrueClass
任何人都可以请解释为什么会这样。
发生这种情况是因为'和'比赋值低。这同样适用于Ruby中的'or'。正因为如此,那些2比控制结构更像操作符,允许你执行'do_something()或失败'等事情,但对于新的Ruby程序员经常会感到困惑。 – Borsunho