在我的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