2012-07-13 45 views
0

我有下面的代碼,這是爲了在Array#detect提供一個簡單true-false包裝,這是nil-element簡單的檢測溶液,產生的困難

class Array 
    def any &expr 
    if (self.detect expr) 
     return true 
    else 
     return false 
    end 
    end 
end 

由於某種奇怪的原因,無論傳遞給&expr什麼,它總是返回true!爲什麼是這樣?

+2

數組已通過Enumerable擁有'any?':http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-any-3F – 2012-07-13 03:11:42

回答

4

Enumerable#detect的文檔說它可以選擇帶一個參數。如果它沒有找到匹配你的塊的元素,它會返回這個參數。在你的情況下,你傳遞一個Proc對象exprdetect,而不是傳遞一個塊。這會導致detect返回一個枚舉數,它不會被解釋爲「虛假」值。

我認爲你想讓self.detect &expr通過一個實際的塊而不是一個Proc。