我想在单例类上定义一个类变量。我检查了这个程序的结果:
class C
class << self
@@val = 100
end
end
C.singleton_class.class_variables #=> [], I expect [:@@val]
C.class_variables #=> [:@@val]
我希望@@val
的范围是单身类,不是吗?
您能告诉我如何使用class << self
在单例类上定义类变量,以及该程序不正确的原因吗?
答案 0 :(得分:3)
这是因为当Ruby解析器遇到类变量时,根据词法范围解析当前类。
比照。 http://blog.honeybadger.io/lexical-scoping-and-ruby-class-variables/
答案 1 :(得分:1)
要设置单例类变量,可以使用:
class C
class << self
class_variable_set :@@cv, 42
end
end
C.singleton_class.class_variables #⇒ [:@@cv]
C.singleton_class.class_variable_get :@@cv #⇒ 42