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 で 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 2.5 で追加される yield_self メソッド | Secret Garden (Instrumental)

Ruby で yield_self のめっちゃ便利な使い道 | Secret Garden (Instrumental)

Ruby 2.5 の `yield_self` が想像以上に何だかスゴい件について 翻訳 | TechRacho

instance method Object#yield_self (Ruby 2.6.0)

Combinatory method like tap, but able to return a different value? – Stack Overflow

タグ:

コメントを残す

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