[英]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.