Ruby on rails &&;使用三元运算符

Ruby on rails &&;使用三元运算符,ruby-on-rails,ruby,Ruby On Rails,Ruby,嘿,当我偶然发现这段代码时,我正在跟随迈克尔·哈特尔的铁路结构 有人知道三元运算符使用“用户&&”的目的吗 代码如下: def self.authenticate(email, submitted_password) user = find_by_email(email) user && user.has_password?(submitted_password) ? user : nil end 在应用方法之前,它只需检查用户是否有任何值上有密码?。&是逻辑的和,但它

嘿,当我偶然发现这段代码时,我正在跟随迈克尔·哈特尔的铁路结构

有人知道三元运算符使用“用户&&”的目的吗

代码如下:

def self.authenticate(email, submitted_password)
  user = find_by_email(email)
  user && user.has_password?(submitted_password) ? user : nil
end

在应用方法之前,它只需检查
用户
是否有任何值
上有密码?

&
是逻辑的
,但它的优先级高于
。所以这个语句只是说,如果user不是nil,并且user拥有该密码,那么就返回user,否则返回nil

在Ruby中,逻辑and的第二部分,如果第一部分为false,则不执行。因此,这里的目的是确保在调用
上有密码?
之前有用户,从而防止调用
上有密码?
时出错。另一种方法是使用
try
,例如:

user.try(:has_password?, submitted_password) ? user : nil

可能重复的好消息是:调用基于参数值跳过逻辑表达式的一部分的概念。对于表达式中可能有副作用的部分,请务必小心,这样可以跳过这些副作用。也就是说,完全避免这些。