Различие между mattr_accessor и cattr_accessor в ActiveSupport?

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

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

7
задан Community 23 May 2017 в 12:07
поделиться

1 ответ

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

class Bar
  mattr_accessor :test
end

, но

module Foo
  cattr_accessor :test
end

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

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

10
ответ дан 7 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: