簡體   English   中英

Ruby:將`&proc`和`proc`傳遞給方法之間的區別

[英]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_listproc視為自身的第三個參數,而不是塊。 &符號變換Proc對象成塊,其被稱為內部print_listyield關鍵字。

更簡潔地說, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM