ActiveSupport中mattr_accessor和cattr_accessor之间的区别?

我无法通过查看源代码分别在Class和Module中提供的cattr_*mattr_*方法之间的差异来解决这个cattr_* 。 我读到了这个问题: Rails模块中的mattr_accessor是什么? 这提供了有关这两种方法的一些细节,但没有强调差异。

所以我的问题是它们之间有什么区别?为什么我们在源代码中几乎完全相同时需要两套方法? 另外,我们应该在什么时候使用?

Module是类Class的超类,因此如果可以考虑适当的通用名称,那么定义访问器的方法可以放在Module ,它适用于模块和类。 请注意以下工作:

 class Bar mattr_accessor :test end 

 module Foo cattr_accessor :test end 

不行。

在应该在类中使用的方法上有一个c前缀,在模块内部使用的方法上有一个m前缀,这有助于使代码更清晰一些。