def no_splat(splat, &block) block.call(splat) end def splat_call(splat, &block) block.call(*splat) end def splat_param(*splat, &block) block.call(splat) end %w[no_splat splat_call splat_param].each do |func| puts "testing: #{func}\n" result = '' begin send(func, [1,2]) do |recv| result = recv.inspect end rescue result = 'Failed' end puts "Array:\t\t#{result.inspect}" begin send(func, [1,2]) do |*recv| result = recv.inspect end rescue result = 'Failed' end puts "Array splat recv:\t\t#{result.inspect}" begin send(func, *[1,2]) do |recv| result = recv.inspect end rescue result = 'Failed' end puts "Positional:\t\t#{result.inspect}" begin send(func, *[1,2]) do |*recv| result = recv.inspect end rescue result = 'Failed' end puts "Positional splat recv:\t\t#{result.inspect}" puts "\n\n" end