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]
こっちの方が使う機会は多そう。