Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
次のコードがあります。これは、 の単純なラッパーを提供することになっていtrue-falseます。Array#detectnil-element
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 を返します! どうしてこれなの?
&expr
Enumerable#detect のドキュメントには、オプションで 1 つの引数を取ることができると書かれています。ブロックに一致する要素が見つからない場合、この引数を返します。あなたの場合、ブロックを渡さずに Proc オブジェクトを にexpr渡しdetectています。これによりdetect、「偽の」値として解釈されない列挙子が返されます。
expr
detect
self.detect &expr代わりに、Proc の代わりに実際のブロックを渡したいと思います。
self.detect &expr