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