Ruby语法 - 阻塞if语句(Devise Source)

时间:2017-05-03 15:44:31

标签: ruby devise

我无法绕过这个if语句。它有一个条件,紧接着是一个块。这是什么意思/你为什么选择这样做?这来自Devise源代码。

   if validate(resource){ hashed = true; resource.valid_password?(password) }
     remember_me(resource)
     resource.after_database_authentication
     success!(resource)
   end

全班在这里:https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/database_authenticatable.rb

1 个答案:

答案 0 :(得分:1)

Devise::Strategies::Authenticable#validate接受一个阻止。

您发布的代码是简短形式:

validated = validate(resource) do
  hashed = true
  resource.valid_password?(password)
end

if validated
  remember_me(resource)
  resource.after_database_authentication
  success!(resource)
end

他们为什么要这样写呢? - 没有想法。可能是因为没有rubocop。