2014-01-31 43 views
2

在這種方法的意思表達「&Proc.new」,我發現在鐵軌來源:請給我解釋一下,什麼紅寶石方法

#導軌/ railties/lib中/導軌/ engine.rb

def routes 
    @routes ||= ActionDispatch::Routing::RouteSet.new 
    @routes.append(&Proc.new) if block_given? 
    @routes 
end 

我不明白如何運作表達 「& Proc.new」。

因爲,當我寫在乾淨的紅寶石類似的代碼,一樣:

def method_name 
    &Proc.new if block_given? 
end 
proc = method_name{ puts 'Hello world!' } 
proc.call 

我收到一個語法錯誤

回答

2

&在參數列表中有特殊的意義 - 作爲前綴PROC對象時它將它作爲塊傳遞給被調用的方法。在方法體內它只是一個二元運算符。

+0

非常感謝您的好解釋! –

3

首先你應該知道並理解塊和Procs是什麼。基本上他們是紅寶石提供關閉的方式。 Here是一個很好的鏈接。

在紅寶石一元符號操作者具有3個用途(所有這些相關的塊和進程):

  • 如果在一個方法定義應用到的參數,然後隱式塊參數被存儲爲使用參數名稱進行處理。

  • 如果應用於方法調用中的Proc,則包含在Proc中的塊將作爲隱式塊參數傳遞。它保留了Proc是否是lambda。方法總是lambda。

  • 如果在方法調用中應用於其他對象,則調用方法#to_proc,並且如第二種情況那樣傳遞生成的Proc。

The & Operator in Ruby詳細解釋它。

+0

謝謝你的信息。我知道Proc和lambda是什麼,但事實證明,我的知識並不完美 –

+0

鏈接是下降:( – LeEnno