2017-05-03 134 views
0

如果聲明中包含我的頭,我遇到了麻煩。它有一個條件,緊接着一個塊。這是什麼意思/爲什麼你會選擇這樣做?這是來自Devise源代碼。Ruby語法 - Block if語句(設計源)

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

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 

他們爲什麼會寫這樣-No想法?可能是由於缺乏rubocop。

+0

我甚至沒想到該方法可能會阻塞。謝謝! – Trinculo

+1

@Trinculo:即使一個方法沒有佔用一個塊,你仍然可以通過一個塊。 –

+0

@SergioTulentsev - 很高興知道,謝謝。即使經過幾年,我依然在學習一些小技巧:-) – Trinculo