投稿

Rubyのtapとthen

Rubyのtapとthen

基本

  tap then ( = yield_self)
戻り値 レシーバ ブロックの戻り値
1
2
3
text = 'abc'
text.tap  {|x| x.upcase } #=> 'abc'
text.then {|x| x.upcase } #=> 'ABC'

tap も then も、ブロック引数への破壊的変更は、レシーバに影響する。

1
2
3
4
text = 'abc'
text.tap {|x| x.upcase } #=> 'abc'
text.tap {|x| x.upcase! } #=> 'ABC'
text #=> 'ABC'

少々の変更を行う際に、一時変数を使わずに、メソッドチェーンで書ける。

補足

then は ブロックを渡さないと、レシーバを1つの要素にした Enumerable を返す。

1
'abc'.then.to_a #=> ['abc']

また tap も break で抜けると、then のように振る舞う。

1
2
3
4
text = 'abc'
text.tap  {|x| x.upcase } #=> 'abc'
text.then {|x| x.upcase } #=> 'ABC'
text.tap  {|x| break x.upcase } #=> 'ABC'

※ break はブロック中で任意の値を返せる。

1
['a', 'b', 'c'].map {|x| break 1 } #=> 1
この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。

トレンドのタグ