使用できる可能性のある用途と場所がいくつかある可能性がありますtap
。これまでのところ、次の 2 つの使用方法しか見つかりませんでしtap
た。
1) このメソッドの主な目的は、チェーン内の中間結果に対して操作を実行するために、メソッド チェーンを利用することです。すなわち
(1..10).tap { |x| puts "original: #{x.inspect}" }.to_a.
tap { |x| puts "array: #{x.inspect}" }.
select { |x| x%2 == 0 }.
tap { |x| puts "evens: #{x.inspect}" }.
map { |x| x*x }.
tap { |x| puts "squares: #{x.inspect}" }
2) 何かのオブジェクトに対してメソッドを呼び出したときに、戻り値が望んだものではないことに気付いたことはありませんか? ハッシュに格納された一連のパラメーターに任意の値を追加したいと思うかもしれません。Hash.[]で更新しますが、params ハッシュの代わりにbarが返されるため、明示的に返す必要があります。すなわち
def update_params(params)
params[:foo] = 'bar'
params
end
ここでこの状況を打破するために、tap
メソッドが登場します。オブジェクトで呼び出して、実行したいコードを含むブロックをタップするだけです。オブジェクトはブロックに渡され、返されます。すなわち
def update_params(params)
params.tap {|p| p[:foo] = 'bar' }
end
他にもたくさんのユースケースがありますので、自分で見つけてみてください :)
出典:
1) API Dock オブジェクト タップ
2)使用すべき 5 つのルビー メソッド