9

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

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

4

1 回答 1

12

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

class Bar
  mattr_accessor :test
end

module Foo
  cattr_accessor :test
end

行不通。

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

于 2010-02-04T23:51:46.087 回答