Тут може бути кількість застосувань та місць, де ми можемо користуватися 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. [] , Але ви отримуєте зворотний рядок замість хеш-парамів, тому вам доведеться його явно повернути. тобто
def update_params(params)
params[:foo] = 'bar'
params
end
Щоб подолати цю ситуацію тут, tap
грає метод. Просто зателефонуйте на об’єкт, а потім перейдіть до торкання блоку з кодом, який ви хотіли запустити. Об'єкт буде переданий до блоку, після чого буде повернутий. тобто
def update_params(params)
params.tap {|p| p[:foo] = 'bar' }
end
Є десятки інших випадків використання, спробуйте їх знайти самостійно :)
Джерело:
1) Док-об’єкт док-сервісу API
2) методи, що використовуються п'ять рубінів
User.new.tap &:foobar