2014-05-09 42 views
0

我有一段代碼從codeacademy的問題略有修改。該代碼是:Ruby:將`&proc`和`proc`傳遞給方法之間的區別

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 

如果我從最後一行除去&紅寶石拋出我的說法錯誤。這裏的&的目的是什麼?

回答

1

如果您刪除&,那麼print_listproc作爲自身的第三個參數,而不是塊。 &符號將Proc對象轉換爲一個塊,該塊通過yield關鍵字在print_list內部調用。

更簡潔地說, proc只是一個參數,&proc是對傳遞給該方法的塊的引用。

您可能會發現this article瞭解proc和塊

+0

範圍是否與&proc有關? – user3619165

+0

當涉及到作用域時,Procs與變量沒有區別 - 它必須位於作用域內才能引用! – TCSGrad

1

的&之間的差異有用表明PROC應該作爲一個塊進行傳遞。

沒有它,「過程」將只是另一個(第三)的參數,所以你會得到的參數錯誤(3 2)

有可能通過它沒有&並在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 
相關問題