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
の下でライセンスされています。