each が返すのは self か?

結局 Enumerator#each の戻り値は object ではなく self っぽい。
String#each_byte の戻り値は () ではなく self っぽい。

self っぽいけど、本当に self なのか?

試してみた。

"NO RUBY, NO LIFE".each_byte{|b|} # => "NO RUBY, NO LIFE"
                                  # 戻り値は self っぽいが ...

s = "NO RUBY, NO LIFE"
t = "NO RUBY, NO LIFE"

s.object_id                     # => 134583110
t.object_id                     # => 134583100
                                # 同じ文字列でも別のオブジェクト

s.each_byte{|b|}.object_id      # => 134583110
                                # やっぱり self だった


[1, 1, 2, 3].each{|i|}          # => [1, 1, 2, 3]
                                # 戻り値は self っぽいが ...

a = [1, 1, 2, 3]
b = [1, 1, 2, 3]

a.object_id                     # => 134628410
b.object_id                     # => 134628390
                                # 同じ内容でも別のオブジェクト

a.each{|i|}.object_id           # => 134628410
                                # やっぱり self だった