functions/anonymous_parameter_forwarding_no_parens.rb

tests/_examples/functions/anonymous_parameter_forwarding_no_parens.rb in the metorex repository.

def target *args, **options, &given
  [args, options, given.nil?].inspect
end

def forward_rest(*)
  target(*)
end
puts forward_rest 1, 2

def forward_keywords(**)
  target(**)
end
puts forward_keywords a: 1

def forward_block(&)
  target(&)
end
puts forward_block { :ignored }

def forward_everything(...)
  target(...)
end
puts forward_everything 1, a: 2

["*", "**", "&"].each do |anonymous|
  begin
    eval "def outer(#{anonymous}); proc { |#{anonymous}| target(#{anonymous}) }; end"
    puts "no error"
  rescue SyntaxError => refused
    puts refused.message.include? "also used within block"
  end
end

Output:

[[1, 2], {}, true]
[[], {a: 1}, true]
[[], {}, false]
[[1], {a: 2}, true]
true
true
true