Ruby block - return yield running code after yield

895 Views Asked by At

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
1

There are 1 best solutions below

4
On BEST ANSWER

You could use tap:

def myblock
  yield.tap { puts 'after yield' }
end

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