问题
I can't work out from looking through the source what the difference is between the cattr_*
and mattr_*
methods provided in Class and Module respectively. I read this question: What is mattr_accessor in a Rails module? which gives some details about both methods but doesn't highlight the differences.
So my question is what is the difference between them and why do we need both sets of methods when they are practically identical in the source? Also, which should we use when?
回答1:
Module
is the superclass of the class Class
so if a suitably generic name could be thought of then the methods for defining accessors could be put on Module
and it would work for modules and classes. Notice that the follow works:
class Bar
mattr_accessor :test
end
but
module Foo
cattr_accessor :test
end
wouldn't work.
Having a c prefix on the methods that should be used inside classes and an m prefix on the methods for use inside modules just helps to make your code a bit clearer.
来源:https://stackoverflow.com/questions/2203800/difference-between-mattr-accessor-and-cattr-accessor-in-activesupport