Ruby 为什么我的担心';s cattr_访问器在所有子类中设置为相同的值?
下面是一个可运行的测试,以了解情况Ruby 为什么我的担心';s cattr_访问器在所有子类中设置为相同的值?,ruby,Ruby,下面是一个可运行的测试,以了解情况 require 'active_support' module MyModule extend ActiveSupport::Concern included do cattr_accessor :value end end class A include MyModule self.value = 'a' end class B < A self.value = 'b' end class C < A s
require 'active_support'
module MyModule
extend ActiveSupport::Concern
included do
cattr_accessor :value
end
end
class A
include MyModule
self.value = 'a'
end
class B < A
self.value = 'b'
end
class C < A
self.value = 'c'
end
puts A.value
puts B.value
puts C.value
现在,我认为输出应该是
a
b
c
但这一切都是最后一次设定的
如果我把include移到B类和C类,而让A类不包含模块,那么我就得到了所需的输出。。。但我有包括所有地方。。。所以我觉得这是我的cattr_访问器使用的问题
这是为什么?我如何实现所需的功能?来自reddit用户:
请尝试以下操作,而不是使用cattr_访问器:
class << self
attr_accessor :foo
end
class否,您创建了一个共享类变量以及由于该事实而获得的输出。看下面的例子,看看Chuck的答案:我是如何解决这个问题的:
class << self
attr_accessor :foo
end