ActiveSupport中mattr_accessor和cattr_accessor之间的区别?

tob*_*son 7 ruby ruby-on-rails activesupport

我无法从通过源的区别是什么之间找工作了cattr_*,并mattr_*分别在类和模块提供的方法.我读到了这个问题:Rails模块中的mattr_accessor是什么?它提供了两种方法的一些细节,但没有强调差异.

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

mik*_*kej 10

Module是类的超类,Class所以如果可以想到一个适当的通用名称,那么可以使用定义访问器的方法Module,它可以用于模块和类.请注意以下工作:

class Bar
  mattr_accessor :test
end
Run Code Online (Sandbox Code Playgroud)

module Foo
  cattr_accessor :test
end
Run Code Online (Sandbox Code Playgroud)

不行.

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