如何在单例类上定义类变量

时间:2015-11-25 16:06:44

标签: ruby singleton class-variables

我想在单例类上定义一个类变量。我检查了这个程序的结果:

class C
  class << self
    @@val = 100
  end
end

C.singleton_class.class_variables #=> [], I expect [:@@val]
C.class_variables #=> [:@@val]

我希望@@val的范围是单身类,不是吗?

您能告诉我如何使用class << self在单例类上定义类变量,以及该程序不正确的原因吗?

2 个答案:

答案 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