【发布时间】: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 的用法?
为什么会这样,如何实现所需的功能?
【问题讨论】:
-
不,您创建了一个共享类变量,并且由于该事实而获得了输出。看例子apidock.com/rails/Module/mattr_accessor
-
在这里查看 Chuck 的回答:stackoverflow.com/questions/10594444/class-variables-in-ruby
标签: ruby