ruby:共享类变量继承

时间:2016-09-07 15:50:04

标签: ruby-on-rails ruby ruby-on-rails-4 inheritance

在我的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的不同组合,但没有任何效果。

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

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