Note

3年後の自分のために書いています

Ruby の Array#each で空の配列をレシーバに取るとブロック内は実行されない

タイトルのまんまですが。

nil が回ったりするのかなと勝手に思ってました。

# レシーバが空の配列だとブロック内は実行されない
[].each { puts 'hoge'} #=> []
[].each { |i| puts i } #=> []
# Hash#each も同じく
{}.each { puts 'hoge'} #=> {}
{}.each { |k, v| puts k, v } #=> {}
# ブロック無しの場合に返す Enumerator オブジェクトももちろん空
e = [].each #=> #<Enumerator: ...>
e.each { |i| puts i} #=> []

参考

あんまり詳細載ってないけれど。

instance method Array#each (Ruby 2.6.0)

instance method Hash#each (Ruby 2.6.0)