【发布时间】:2015-12-12 20:25:58
【问题描述】:
根据this堆栈问题,
and与&&相同,但优先级较低
我很理解这一点。而且我相信这个问题与上述问题并不重复。
在我的控制器中执行以下代码时:
user = user_email.present? && User.find_by(email: user_email)
user 变量为User 模型保存active record object。因此执行user.valid_password? user_password 没有报错,测试成功。
但是当我尝试将&& 替换为and 时,结果非常令人惊讶。
当我尝试使用以下代码时:
user = user_email.present? and User.find_by(email: user_email)
user 变量持有boolean 值,因此执行user.valid_password? user_password出现以下错误:
未定义的方法`valid_password?'为真:TrueClass
谁能解释一下为什么会这样。
【问题讨论】:
-
发生这种情况是因为
and的优先级低于分配。这同样适用于 Ruby 中的or。正因为如此,这 2 种操作更像是控制结构而不是运算符,允许您执行do_something() or fail之类的操作,但对于新的 Ruby 程序员来说往往会感到困惑。
标签: ruby-on-rails ruby