metaprogramming/block_param_defaults.rb
tests/_examples/metaprogramming/block_param_defaults.rb in the metorex repository.
# Block parameter defaults — written without parentheses where possible.
# `{ |a, b = 1| }` binds b to 1 when only one argument is supplied, both
# in direct block calls and in methods created via define_method. A
# trailing comma in the parameter list parses (`|a,|`).
pair = lambda { |a, b = 1| [a, b] }
puts pair.call(5).inspect
puts pair.call(5, 6).inspect
klass = Class.new do
define_method(:m) { |a, b = 1| return a, b }
end
puts klass.new.m(1).inspect
puts klass.new.m(1, 2).inspect
begin
klass.new.m
rescue ArgumentError
puts "ArgumentError"
end
begin
klass.new.m(1, 2, 3)
rescue ArgumentError
puts "ArgumentError"
end
first_only = lambda { |a,| a }
puts first_only.call(9).inspect
Output:
[5, 1]
[5, 6]
[1, 1]
[1, 2]
ArgumentError
ArgumentError
9