[英]Ruby: Difference between passing `&proc` and `proc` to a method
我对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会抛出参数错误。 &这里的目的是什么?
如果删除&
,则print_list
将proc
视为自身的第三个参数,而不是块。 的&
符号变换Proc
对象成块,其被称为内部print_list
由yield
关键字。
更简洁地说, proc
只是一个参数, &proc
是对传递给该方法的块的引用。
您可能会发现本文对理解proc和块之间的区别很有帮助
&表示proc应该作为一个块传递。
没有它,“ proc”将只是另一个(第三个)参数,因此您将得到参数错误(3个代表2)
可以在不带&的情况下传递它,并直接将它作为proc在您的print_list方法中使用...但是首先不能是可选的。 您需要先通过,或者至少要通过。
def print_list(array, first, proc)
counter = first || 1
array.each do |array|
puts "#{proc.call counter} #{array}"
counter = counter.next
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.