metaprogramming/define_method_lambda_control_flow.rb
tests/_examples/metaprogramming/define_method_lambda_control_flow.rb in the metorex repository.
puts Class.new { define_method(:foo) { return 42 } }.new.foo.inspect
puts Class.new { define_method(:foo) { break 42 } }.new.foo.inspect
puts Class.new { define_method(:foo) { next 42 } }.new.foo.inspect
retrying = Class.new do
seen = []
define_method(:foo) do
if seen.empty?
seen << :first
redo
else
seen << :second
seen
end
end
end
puts retrying.new.foo.inspect
# A trailing comma makes a Proc destructure a lone array argument; the method
# built from the same block keeps the plain single-parameter arity.
puts proc { |first,| first }.call([1, 2]).inspect
puts Class.new { define_method(:m) { |first,| first } }.new.m([1, 2]).inspect
Output:
42
42
42
[:first, :second]
1
[1, 2]