2017-06-02 44 views
1

我在讀Rails docs,我遇到了macros這個詞。 我無法找到該術語的定義(在Rails的上下文中)。 有人能指給我一個定義術語的地方嗎?什麼是Rails中的宏?

我熟悉在不同的上下文爲「記錄」的行動(鼠標,在OS鍵盤動作,例如)軟件術語。 該術語的不同用法之間是否有任何聯繫?

回答

3

宏是創建新實例方法的類方法。如果您在超類中創建一個宏,則其所有子類都可以調用該方法,傳入參數並快速創建一個或多個自定義實例方法。

Rails的使用這種技術提供了很多功能用很少的代碼。例如,has_many和belong_to等關聯方法使用宏來生成返回關聯對象的實例方法。

在Ruby,宏取決於使用define_method方法,該方法被調用時,將定義在當前的範圍的方法。它接受一個參數,它成爲新方法的名稱,一個塊是新方法中的代碼。傳遞給塊的任何參數都是新方法可以採用的參數。

舉例來說,這裏是你怎麼能讓這將創建一個類的允許您訪問方法或設置值的宏觀屬性哈希:

def make_columns(columms) 
    columns.each do |col| 
    define_method("#{col}") do 
     attributes[col] 
    end 
    end 


columns.each do |col| 
    define_method("#{col}=") do |value| 
     attributes(col) = value 
    end 
    end 
end 

更多的澄清,通過這個環節去How To Write "Macros" in Ruby

+0

已共享未找到該鏈接的定義:( – blu

+0

再試一次....對不起 –

0

在這種情況下,一個宏是一段代碼生成一些其它碼。例如:

attr_accessor :foo 

產生這樣的:

def foo 
    @foo 
end 

def foo=(val) 
    @foo = val 
end 

是否有期限的不同用途之間有聯繫嗎?

類。你可以說作者attr_accessor「記錄」了它應該擴展到的內容。

+0

有沒有這樣的事情,從Rails的世界,這些時髦的命名:-P – mudasobwa

+0

@mudasobwa只是弱「紅寶石宏」:取決於你的「宏」 :) –