Я не могу работать из просмотра источника, что различие между cattr_*
и mattr_*
методы предоставлены в Классе и Модуле соответственно. Я считал этот вопрос: Что такое mattr_accessor в модуле направляющих? который предоставляет некоторую подробную информацию об обоих методах, но не выделяет различия.
Таким образом, мой вопрос - то, что различие между ними и почему нам нужны оба набора методов, когда они практически идентичны в источнике? Кроме того, который мы должны использовать когда?
Модуль
является суперклассом класса Class
, поэтому, если можно придумать подходящее общее имя, тогда методы для определения средств доступа можно было бы поместить в Модуль
, и он работа для модулей и классов. Обратите внимание, что следующее работает:
class Bar
mattr_accessor :test
end
, но
module Foo
cattr_accessor :test
end
не сработает.
Наличие префикса c для методов, которые должны использоваться внутри классов, и префикса m для методов, используемых внутри модулей, просто помогает сделать ваш код немного понятнее.