2012-07-13 43 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。