我从codeacademy上的问题略微修改了一些代码。代码是:
def print_list(array, first = 1)
counter = first
array.each do |array|
puts "#{yield counter} #{array}"
counter = counter.next
end
end
proc = Proc.new do |n|
"[#{100*n}]:"
end
print_list ["alpha", "beta", "gamma"], 5, &proc
如果我删除&从最后一行Ruby抛出一个参数错误。 &的目的是什么?这里?
答案 0 :(得分:2)
如果删除&
,则print_list
会将proc
视为自身的第三个参数,而不是块。 &
符号将Proc
对象转换为一个块,print_list
关键字在yield
内调用。
更简洁,
proc
只是一个参数,&proc
是对传递给方法的块的引用。
您可能会发现this article对于理解proc和块之间的差异非常有用
答案 1 :(得分:1)
&表示proc应该作为一个块传递。
没有它," proc"将只是另一个(第三个)参数,因此您将获得参数错误(3为2)
没有&&并在print_list方法中直接将其用作proc ...但首先不能是可选的。你需要先通过或至少通过nil。
def print_list(array, first, proc)
counter = first || 1
array.each do |array|
puts "#{proc.call counter} #{array}"
counter = counter.next
end
end