Разница между mattr_accessor и cattr_accessor в ActiveSupport? - PullRequest
7 голосов
/ 05 февраля 2010

Я не могу понять, просматривая источник, в чем разница между методами cattr_* и mattr_*, представленными в Class и Module соответственно. Я прочитал этот вопрос: Что такое mattr_accessor в модуле Rails? , который дает некоторые подробности об обоих методах, но не выделяет различия.

Итак, мой вопрос: в чем разница между ними и зачем нам оба набора методов, когда они практически идентичны в источнике? Кроме того, что мы должны использовать, когда?

1 Ответ

10 голосов
/ 05 февраля 2010

Module является суперклассом класса Class, поэтому, если можно было бы придумать подходящее универсальное имя, тогда методы определения методов доступа могут быть добавлены в Module, и это будет работать для модулей и классов. Обратите внимание, что следующие работы:

class Bar
  mattr_accessor :test
end

но

module Foo
  cattr_accessor :test
end

не сработает.

Наличие префикса c для методов, которые должны использоваться внутри классов, и префикса m для методов для использования внутри модулей просто помогает сделать ваш код немного более понятным.

...