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?
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/
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