tap
self
を引数としてブロックを評価し self
を返す。
メソッドチェインの途中でその段階の操作結果を表示するためにメソッドチェインに「入り込む」ことが主目的である。(ブロック内で処理した結果を返すことはできない。)
(1..10) .tap { |x| puts "original: #{x}" } .to_a .tap { |x| puts "array: #{x}" } .select { |x| x.even? } .tap { |x| puts "evens: #{x}" } .map { |x| x*x } .tap { |x| puts "squares: #{x}" }
参考:
Tap が Ruby の新たな制御構造の世界を開く | hp12c
Object#tap、Object#then を使ってみよう | TechRacho
Object#tap で break(値) すると値を返せる、のはなぜ? – Qiita
instance method Object#tap (Ruby 2.5.0)
yield_self / then
self
を引数としてブロックを評価し、ブロックの結果を返す。
"my string".yield_self { |s| s.upcase } # => "MY STRING" 3.next.yield_self { |x| x**x }.to_s # => "256"
Ruby 2.6 で yield_self
の別名として then
が追加された。
参考:
Ruby 2.5 で導入される yield_self について – Qiita
Ruby の #yield_self の良さを #tap と比較して説明する – Qiita
Ruby 2.5 で追加される yield_self メソッド | Secret Garden (Instrumental)
Ruby で yield_self のめっちゃ便利な使い道 | Secret Garden (Instrumental)
Ruby 2.5 の yield_self が想像以上に何だかスゴい件について 翻訳 | TechRacho
Object#then | Ruby リファレンスマニュアル [公式]
Combinatory method like tap, but able to return a different value? – Stack Overflow