【问题标题】:Why does my concern's cattr_accessor get set to the same value across all subclasses?为什么我关注的 cattr_accessor 在所有子类中都设置为相同的值?
【发布时间】:2016-02-23 04:40:16
【问题描述】:

这是一个可运行的测试来查看情况

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

输出是:

$ ruby test.rb
c
c
c

现在,我认为输出应该是

a
b
c

但这一切都只是最后设置的。

如果我将包含移动到 B 类和 C 类并且 A 类不包含模块,那么我会得到所需的输出......但是我到处都包含......所以我觉得这是我的问题cattr_accessor 的用法?

为什么会这样,如何实现所需的功能?

【问题讨论】:

标签: ruby


【解决方案1】:

来自reddit用户ctcherry

代替 cattr_accessor 试试这个:

class << self
  attr_accessor :foo
end

关于这里发生的事情的好信息:http://apidock.com/rails/Class/cattr_accessor

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2012-09-02
    相关资源
    最近更新 更多