Ruby 2.5 で追加される yield_self メソッド

Ruby 2.5 では Object#yield_self というメソッドが追加される予定です。 これは以下のような実装になっています。

class Object
    def yield_self
        yield(self)
    end
end

平たく言うと『ブロックの戻り値を返す #tap』って感じですね。

何が嬉しいのか

この手の『なんか便利そうなメソッド』のユースケースを説明するのが難しいんですが、とりあえず『#tap + break』で任意の戻り値を返したいような場合は #yield_self が利用できるかと。

# break を使って任意の戻り値を返す
# [1, 2, 3].tap { |myself|
#     break myself.map { |it|
#         it + myself.size
#     }
# }
# => [4, 5, 6]

# yield_self だと break は不要
p [1, 2, 3].yield_self { |myself|
    myself.map { |it| it + myself.size }
}
# => [4, 5, 6]

あとは単純にレシーバの値を複数回参照したい場合とかですかね。

p (1..10).select(&:even?).yield_self { |myself|
    myself + myself
}
# => [2, 4, 6, 8, 10, 2, 4, 6, 8, 10]

こっちの方が使う機会は多そう。

参照