How to define a class variable on a singleton class

点点圈 提交于 2019-12-10 10:54:47

问题


I want to define a class variable on a singleton class. I checked this program's result:

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

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

I expect the scope of @@val to be the singleton class, isn't it?

Would you tell me how to define a class variable on a singleton class using class << self, and the reason why this program is not correct?


回答1:


It is because when Ruby parser meets a class variable, the current class is resolved according to the lexical scope.

Cf. http://blog.honeybadger.io/lexical-scoping-and-ruby-class-variables/




回答2:


To set the singleton class variable, one might use:

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


来源:https://stackoverflow.com/questions/33921185/how-to-define-a-class-variable-on-a-singleton-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!