2010-02-04 5 views
7

Sırasıyla Sınıf ve Modülde verilen cattr_* ve mattr_* yöntemleri arasındaki farkın kaynağına bakarak çalışamıyorum. Bu soruyu okudum: What is mattr_accessor in a Rails module?, her iki yöntemle ilgili bazı ayrıntılar verir, ancak farklılıkların altını çizmez.ActiveSupport'ta mattr_accessor ve cattr_accessor arasındaki fark nedir?

Bu yüzden benim sorum, aralarındaki fark nedir ve neden kaynakta pratik olarak özdeş olduklarında her iki yöntem kümesine ihtiyacımız var? Ayrıca, ne zaman kullanmalıyız?

cevap

10

Module yüzden uygun bir jenerik isim daha sonra tanımlayan erişimcilerine yöntemleri Module koymak olabilir ve modülleri ve sınıflar için çalışacak düşünülebilir eğer sınıfın Class üst sınıfı olduğunu. Takip çalışır dikkat edin:

class Bar 
    mattr_accessor :test 
end 

ama

module Foo 
    cattr_accessor :test 
end 

işe yaramaz. modüllerin içinde kullanmak için yöntemler üzerinde sınıflar içindeki kullanılması gereken yöntemler üzerinde bir c önek ve m önek alarak

sadece kod biraz daha anlaşılır kılmak için yardımcı olur.

+0

İşlevsel olarak tamamen eşdeğer midir? Ayrıca, bu bana, Metotlar kaynağında niçin IRS kaynağında bulunmadıklarını merak ediyor. – tobyclemson