Mogłoby istnieć wiele zastosowań i miejsc, z których moglibyśmy skorzystać tap. Jak dotąd znalazłem tylko następujące 2 zastosowaniatap .
1) Głównym celem tej metody jest skorzystanie z łańcucha metod w celu wykonania operacji na wynikach pośrednich w łańcuchu. to znaczy
(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) Czy kiedykolwiek zdarzyło Ci się wywołać metodę na jakimś obiekcie, a wartość zwracana nie była tym, czego chciałeś? Może chciałeś dodać dowolną wartość do zestawu parametrów przechowywanych w hashu. Aktualizujesz go za pomocą Hash. [] , Ale otrzymujesz back bar zamiast hash params, więc musisz go jawnie zwrócić. to znaczy
def update_params(params)
params[:foo] = 'bar'
params
end
Aby przezwyciężyć tę sytuację, tapw grę wchodzi metoda. Po prostu wywołaj to na obiekcie, a następnie przekaż stuknij blok z kodem, który chciałeś uruchomić. Obiekt zostanie przekazany do bloku, a następnie zostanie zwrócony. to znaczy
def update_params(params)
params.tap {|p| p[:foo] = 'bar' }
end
Istnieją dziesiątki innych przypadków użycia, spróbuj znaleźć je sam :)
Źródło:
1) Dock Object API API
2) pięć metod-ruby-powinieneś-używać
User.new.tap &:foobar