ActiveSupport中mattr_accessor和cattr_accessor之间的区别?

时间:2010-02-04 22:43:17

标签: ruby-on-rails ruby activesupport

通过查看源代码和模块中提供的cattr_*mattr_*方法之间的区别,我无法解决这个问题。我读到了这个问题:What is mattr_accessor in a Rails module?,它提供了有关这两种方法的一些细节,但没有强调差异。

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

1 个答案:

答案 0 :(得分:10)

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

class Bar
  mattr_accessor :test
end

module Foo
  cattr_accessor :test
end

无效。

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