8

Ruby (2.0) の splat 引数を持つ procs/blocks は、メソッドやラムダとは異なる動作をするのはなぜですか?

def foo (ids, *args)
  p ids
end
foo([1,2,3]) # => [1, 2, 3]

bar = lambda do |ids, *args|
  p ids
end
bar.call([1,2,3]) # => [1, 2, 3]

baz = proc do |ids, *args|
  p ids
end
baz.call([1,2,3]) # => 1

def qux (ids, *args)
  yield ids, *args
end
qux([1,2,3]) { |ids, *args| p ids } # => 1

これはこの動作の確認ですが、説明はありません: http://makandracards.com/makandra/20641-careful-when-calling-a-ruby-block-with-an-array

4

2 に答える 2