0

次のコードがあります。これは、 の単純なラッパーを提供することになっていtrue-falseます。Array#detectnil-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 のドキュメントには、オプションで 1 つの引数を取ることができると書かれています。ブロックに一致する要素が見つからない場合、この引数を返します。あなたの場合、ブロックを渡さずに Proc オブジェクトを にexpr渡しdetectています。これによりdetect、「偽の」値として解釈されない列挙子が返されます。

self.detect &expr代わりに、Proc の代わりに実際のブロックを渡したいと思います。

于 2012-07-13T03:07:04.587 に答える