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