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