0

我有以下代码,它应该提供一个简单的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!为什么是这样?

4

1 回答 1

4

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

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

于 2012-07-13T03:07:04.587 回答