通过查看源代码和模块中提供的cattr_*
和mattr_*
方法之间的区别,我无法解决这个问题。我读到了这个问题:What is mattr_accessor in a Rails module?,它提供了有关这两种方法的一些细节,但没有强调差异。
所以我的问题是它们之间有什么区别?为什么我们在源代码中几乎完全相同时需要两套方法?另外,我们应该在什么时候使用?
答案 0 :(得分:10)
Module
是类Class
的超类,因此如果可以考虑使用适当的通用名称,那么定义访问器的方法可以放在Module
上,它可以用于模块和课程。请注意以下工作:
class Bar
mattr_accessor :test
end
但
module Foo
cattr_accessor :test
end
无效。
在类中应该使用的方法上有 c 前缀,在模块内部使用的方法上有 m 前缀,这有助于使代码更清晰一些