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 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

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA