昨天遇到的一个奇怪的问题,一直搞不清楚原因。
module Foo
@@foo = 'foo'
end
class A; extend Foo; end
p A.singleton_class.class_variables #=>显示[:@@foo]
p A.singleton_class.class_variable_get("@@foo")
#报错: uninitialized class variable @@foo in #<Class:A> (NameError) Did you mean? @@foo
为什么 class_variables 都能看到@@foo
变量,但class_variable_get
却拿不到,而且错误信息中的 Did you mean? @@foo
也说明内部确实有@@foo
将代码改成A include Foo
后,A.singleton_class.class_variables
返回空数组,但A.singleton_class.class_variable_get("@@foo")
却能返回 foo