2010-02-04 3 views
7

클래스와 모듈에서 각각 제공되는 cattr_*mattr_* 메서드 사이의 차이점을 소스를 살펴 보지 못했습니다. 나는이 질문을 읽었다 : What is mattr_accessor in a Rails module? 두 방법에 대한 세부 사항을 제공하지만 차이점을 강조하지는 않는다.ActiveSupport의 mattr_accessor와 cattr_accessor의 차이점은 무엇입니까?

그래서 내 질문은 그들 사이의 차이점은 무엇이며 왜 소스에서 실제적으로 동일 할 때 두 세트의 메서드가 필요합니까? 또한, 우리는 언제 사용해야합니까?

답변

10

ModuleClass 클래스의 수퍼 클래스이므로 적합한 일반 이름을 생각할 수 있다면 접근자를 정의하는 방법은 Module 일 수 있으며 모듈과 클래스에서 사용할 수 있습니다. 추적이 작동하는지주의 :

class Bar 
    mattr_accessor :test 
end 

하지만

module Foo 
    cattr_accessor :test 
end 

은 작동하지 않을 것입니다. 모듈 내부의 사용 방법에 대한 클래스 내에서 사용되어야하는 방법에 C 접두어와 미터 접두사를 갖는

당신의 코드가 조금 명확하게하는 데 도움이됩니다.

+0

기능상 완전히 동일합니다. 또한, 이것으로 인해 Rails 소스에서 DRY되어 있지 않은 이유를 알 수 있습니다. – tobyclemson

관련 문제