Изменения в новых версиях / Ruby 3.1

# requires Ruby 3.1 or newer

# *** before: ***
def wrap_old(&block)
  puts "before"
  block.call
  puts "after"
end

def run_old(&block)
  wrap_old(&block)
end

# *** in version 3.1: ***
def wrap(&)
  puts "before"
  yield
  puts "after"
end

def run(&)
  wrap(&)   # the anonymous block is forwarded without ever being named
end

run { puts "work" }