callables/lambda_argument_shapes_no_parens.rb
tests/_examples/callables/lambda_argument_shapes_no_parens.rb in the metorex repository.
keywords = ->(named:, optional: 2, **rest) { [named, optional, rest] }
puts keywords.call(named: 1, extra: 3).inspect
begin
keywords.call
rescue ArgumentError => error
puts error.message
end
none = ->(**nil) { :ok }
puts none.call.to_s
begin
none.call(a: 1)
rescue ArgumentError => error
puts error.message
end
spread = ->(first, second = 1, *middle, last) { [first, second, middle, last] }
puts spread.call(1, 2).inspect
puts spread.call(1, 2, 3, 4).inspect
grouped = ->((first, second, *middle, last), (*leading, next_to_last, final)) do
[first, second, middle, last, leading, next_to_last, final]
end
puts grouped.call(1, 2).inspect
puts grouped.call([1, 2, 3], [4, 5, 6, 7]).inspect
taking_a_block = ->(&given) { given.nil? ? :none : given.call }
puts taking_a_block.().to_s
puts taking_a_block.() { :given }.to_s
Output:
[1, 2, {extra: 3}]
missing keyword: :named
ok
no keywords accepted
[1, 1, [], 2]
[1, 2, [3], 4]
[1, nil, [], nil, [], 2, nil]
[1, 2, [], 3, [4, 5], 6, 7]
none
given