&&使用三元运算符
问题描述:
嘿,我偶然发现了Michael Hartl的railstutorial,当时我偶然发现了这段代码。&&使用三元运算符
有没有人知道三元运算符使用“用户& &”?
下面的代码:
def self.authenticate(email, submitted_password)
user = find_by_email(email)
user && user.has_password?(submitted_password) ? user : nil
end
答
&&
是合乎逻辑的and
,只是它的优先级高于and
。所以声明只是说如果用户不是零,并且用户有该密码然后返回用户,否则返回零。
在Ruby中,逻辑的第二部分,如果第一部分为假,则不执行。所以这里的目的是确保在拨打has_password?
之前有用户,从而防止在nil
上调用has_password?
的错误。另一种方式做,这是使用try
,如:
user.try(:has_password?, submitted_password) ? user : nil
+1
很好的事情要知道:基于参数的值跳过部分逻辑表达式的概念被称为[短路评估](http://en.wikipedia.org/wiki/Short-circuit_evaluation)。对于可能有副作用的表达部分,请务必小心谨慎。也就是说,完全避免这些。 – 2011-06-15 12:46:40
答
它只是检查是否有user
应用该方法has_password?
在它之前的任何值。
[Ruby的双符号]的可能重复(http://*.com/questions/1987955/double-ampersand-in-ruby) – 2011-06-14 00:54:23