简单的检测解决方案导致的困难

时间:2012-07-13 03:00:38

标签: ruby arrays

我有以下代码,它应该在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!这是为什么?

1 个答案:

答案 0 :(得分:4)

Enumerable#detect的文档说它可以选择一个参数。如果找不到与您的块匹配的元素,则返回此参数。在您的情况下,您将Proc对象expr传递给detect,而不传递块。这会导致detect返回一个枚举数,该枚举数不会被解释为“虚假”值。

我认为你希望self.detect &expr传递一个实际的块而不是Proc。