2010-02-04 37 views
7

我無法從源頭上查看分別在Class和Module中提供的cattr_*mattr_*方法之間的區別。我讀到這個問題:What is mattr_accessor in a Rails module?它給出了有關這兩種方法的一些細節,但沒有突出顯示差異。ActiveSupport中mattr_accessor和cattr_accessor之間的區別?

所以我的問題是它們之間有什麼區別,爲什麼當它們在源代碼中幾乎相同時我們需要兩套方法?另外,我們應該在什麼時候使用?

回答

10

Module是類Class的超類,所以如果可以考慮一個適當的通用名稱,那麼定義訪問器的方法可以放在Module上,它可以用於模塊和類。請注意,後續工作:

class Bar 
    mattr_accessor :test 
end 

module Foo 
    cattr_accessor :test 
end 

是行不通的。

有對內部模塊的使用方法上應在類中使用的方法ç前綴和前綴只是有助於使你的代碼更清楚一點。

+0

因此,它們在功能上完全等價嗎?此外,這讓我想知道爲什麼他們沒有在Rails源代碼中進行DRYED,因爲方法體是相同的...... – tobyclemson 2010-02-05 13:36:47

相關問題