This is how I would pass arbitrary arguments to lambda:
def with_arguments(&block)
args = %w(foo bar)
n = block.arity
block.call *(n < 0 ? args : args.take(n))
end
with_arguments &lambda { |foo| }
with_arguments &lambda { |foo, bar| }
with_arguments &lambda { |*args| }
with_arguments &lambda { |foo, *args| }
with_arguments &lambda { |foo, bar, *args| }
n , lambda . (n + 1).abs . , , .
lambda , n args. , .
lambda , args :
with_arguments &lambda { |foo, bar, baz, *args| }
:
def with_arguments(&block)
block.call 'foo', 'bar'
end
with_arguments { |x| puts x }
with_arguments { |x, y| puts x, y }
with_arguments { |x, y, z| puts x, y, z }
, nil.
, Proc s - lambda , . , , Proc#lambda?
, , yield:
def with_arguments
yield 'foo', 'bar'
end