🐥
[Bug #21124] #Enumerable#find にブロック引数を渡さなかったときの #size の話
[Bug #21124] Enumerable#find called without a block returns Enumerator without size
- ブロック引数がない
#find
の#size
が意図しない値を返すというバグ報告- 以下の例だと
nil
が返ってくる
- 以下の例だと
p [1, 2, 3].find.size
# => nil
- 他のメソッドだと元の要素数がそのまま返ってきます
p [1, 2, 3].map.size # => 3
p [1, 2, 3].select.size # => 3
- また
#to_a
を呼ぶと元の要素を返します
p [1, 2, 3].find.to_a
# => [1, 2, 3]
- これなんですが『呼び出し回数はブロックの戻り値によって変わるので
size
が不明 =nil
を返す』とコメントされていますね -
#find
にブロックを渡さなかった場合にどういう挙動になるのかと思ったら#each
でチェーンしてtrue
を返したらその要素が返ってくるみたいですね
p [3, 5, 2].find.each { _1.even? } # => 2
p [6, 2, 5].find.each { _1.odd? } # => 5
- と、いうことでこのチケットは閉じられています
-
#size
がnil
を返すケースなんてあったんですねー
Discussion