通过查看源代码,我找不出分别在类和模块中提供的cattr_*和mattr_*方法之间的区别。我读到了这个问题:What is mattr_accessor in a Rails module?,它提供了关于这两种方法的一些细节,但没有强调差异。
所以我的问题是,它们之间的区别是什么,为什么我们需要这两组方法,而它们在源代码中实际上是相同的?另外,我们应该在什么时候使用哪一个?
发布于 2010-02-05 07:51:46
Module是类Class的超类,所以如果可以想出一个合适的通用名称,那么定义访问器的方法就可以放在Module上,它将适用于模块和类。请注意,以下代码可以正常工作:
class Bar
mattr_accessor :test
end但
module Foo
cattr_accessor :test
end不会起作用的。
在应该在类中使用的方法上加一个c前缀,在模块内使用的方法上加一个m前缀,这有助于使您的代码更清晰一些。
https://stackoverflow.com/questions/2203800
复制相似问题