rubyyieldruby-block

Ruby block - return yield running code after yield


I want to return the output of yield but also execute the code after yield, is there a more "right" way?:

def myblock
  yield_output = yield
  puts 'after yield'
  yield_output
end

myblock {'my yield'}
# after yield
#  => my yield

Solution

  • You could use tap:

    def myblock
      yield.tap { puts 'after yield' }
    end
    
    myblock { 'my yield' }
    # after yield
    #=> my yield