2013-01-24 51 views
0

我正在使用rails控制檯來調試問題。什麼與軌道服務器導軌控制檯中的錯誤,我找不出原因。爲什麼.each {| rule |如果!user.match(rule).nil返回false。 }不能在Rails C中工作?

我的代碼:

1.9.3-p125 :016 > user_rules.each { |rule| return false if !user.match(rule).nil?} 
LocalJumpError: unexpected return 
    from (irb):16:in `block in irb_binding' 
    from (irb):16:in `each' 
    from (irb):16 

任何想法,爲什麼:

email = "[email protected]" 
user_rules = [/\+/, /\-/, /all/, /updates/, /team/] 
user, domain = email.downcase.split('@') 
user_rules.each { |rule| return false if !user.match(rule).nil? } 

與最後一行的錯誤?

+1

這基本上是http://stackoverflow.com/questions/2325471/using-return-in-a-ruby-block的副本。簡短的回答是,你不想從這樣的lambda返回,因爲它試圖從封閉函數返回。 –

+0

@JimStewart謝謝你指出。會是建議的更新?下面回答,我會將其標記爲正確。謝謝 – AnApprentice

+2

爲了澄清,代碼沒有任何明顯的錯誤,但它可能會更清楚地寫爲'return if user_rules.any? {|規則| !user.match(規則).nil? }'。 –

回答

1

您正在使用虛假的回報在

user_rules.each { |rule| return false if !user.match(rule) }

但拉姆達亙古不變的支持的回報,如果不是內部函數/方法使用。