Pode haver vários usos e lugares onde podemos usar tap
. Até agora, encontrei apenas 2 usos de tap
.
1) O objetivo principal deste método é explorar uma cadeia de métodos, a fim de realizar operações em resultados intermediários dentro da cadeia. ie
(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) Você já se pegou chamando um método em algum objeto e o valor de retorno não era o que você queria? Talvez você queira adicionar um valor arbitrário a um conjunto de parâmetros armazenados em um hash. Você o atualiza com Hash. [] , Mas obtém a barra de volta ao invés do hash de parâmetros, então você tem que retorná-lo explicitamente. ie
def update_params(params)
params[:foo] = 'bar'
params
end
Para superar essa situação aqui, o tap
método entra em jogo. Basta chamá-lo no objeto e, em seguida, tocar em um bloco com o código que você deseja executar. O objeto será cedido ao bloco e então devolvido. ie
def update_params(params)
params.tap {|p| p[:foo] = 'bar' }
end
Existem dezenas de outros casos de uso, tente encontrá-los você mesmo :)
Fonte:
1) API Dock Object tap
2) five-ruby-methods-you-should-using
User.new.tap &:foobar