根據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