Ruby:共享类变量继承



在我的Rails应用程序中,我得到了一个包含在基类中的问题。然后继承基类。

包含的模块定义了一个类变量,无论我是在基类还是子类中,我都希望它具有相同的值。

代码看起来类似:

module M
  def self.included(base)
    base.extend ClassMethods
  end
  module ClassMethods
    attr_accessor :lol
    def toto
      @lol ||= {}
    end
    def toto=(val)
      @lol = val
    end
  end
end

class A
  include M
end
class B < A
end
puts A::toto
puts B::toto
puts A::toto = 12
puts B::toto

我实际上使用了关注点,但行为是一样的。

这段代码打印

{}
{}
12
{}

而我想

{}
{}
12
12

有什么方法可以做到这一点吗?我尝试过attr_accessor/cattr_accessor的不同组合,但没有任何作用

尝试如下:

module M
  def self.included(base)
    base.extend ClassMethods
    base.instance_eval do
      cattr_accessor :toto, instance_writer: false, instance_reader: false do 
        {}
      end          
    end  
  end
  module ClassMethods
    # class methods 
  end
end

class A
  include M
end
class B < A
end
puts A.toto
puts B.toto
puts A.toto = 12
puts B.toto
# {}
# {}
# 12
# 12

最新更新