我有以下代码,它应该在true-false
之上提供一个简单的Array#detect
包装,即nil-element
。
class Array
def any &expr
if (self.detect expr)
return true
else
return false
end
end
end
出于一些奇怪的原因,无论传递给&expr
的是什么,它总是会返回true!这是为什么?
答案 0 :(得分:4)
Enumerable#detect的文档说它可以选择一个参数。如果找不到与您的块匹配的元素,则返回此参数。在您的情况下,您将Proc对象expr
传递给detect
,而不传递块。这会导致detect
返回一个枚举数,该枚举数不会被解释为“虚假”值。
我认为你希望self.detect &expr
传递一个实际的块而不是Proc。