control_flow/yield_placement.rb

tests/_examples/control_flow/yield_placement.rb in the metorex repository.

def hands_over
  yield(1)
end
puts(hands_over { |taken| taken * 2 })

["class Holder; yield; end", "module Held; yield; end", "1.times { yield }"].each do |source|
  begin
    eval(source)
    puts("no error")
  rescue SyntaxError => error
    puts(error.message.include?("Invalid yield").to_s)
  end
end

Output:

2
true
true
true