cattr_accessor
class Base
cattr_accessor :settings
# def self.settings
# @@settings
# end
# def self.settings=(value)
# @@settings = value
# end
end
As variáveis de classe tendem a vagar de classe para classe. @@settings
a variável de classe pode ser exposta por meio da árvore de herança.
class Subclass < Base
end
> Base.settings = 'foo'
> Subclass.settings # => 'foo'
> Subclass.settings = 'bar'
> Base.settings # => 'bar'
class_attribute
class Base
class_attribute :settings
# def self.settings
# nil
# end
# def self.settings?
# !!settings
# end
# def self.settings=(value)
# # store value in singleton class
# # by redefining `settings` method each time
# end
end
O valor das configurações é herdado por subclasses. As subclasses podem alterar seu próprio valor e não afetarão a classe base.
class Subclass < Base
end
> Base.settings = 'foo'
> Subclass.settings # => 'foo'
> Subclass.settings = 'bar'
> Base.settings # => 'foo'