Ruby在Object中寻找类变量而不是特定的类

这部分有效:

class Example1 @@var1= "var1 in the Example1" def get_var1 @@var1 end end example1 = Example1.new example1.get_var1 # => "var1 in the Example1" 

但如果我尝试本征类:

 def example1.get_var1 @@var1 end example1.get_var1 # NameError: uninitialized class variable @@var1 in Object # from (pry):128:in `get_var1' 

Ruby在Object而不是Example查找@@var1

我已经在Ruby 1.9.3和2.0中测试了这个代码并得到了相同的结果。

为什么会这样?
第二件事,我们可以关闭它(所以example.get_var1不会在Object中查找类变量)?

似乎类变量查找的词法范围有点古怪。 尽我所知,因为你不在里面

 class Example1 end 

block,ruby不会在你的类中查找@@ var,而是在Object中查找。 如果你想从你的class级明确地想要它,你可以这样做:

 def example1.get_var self.class.class_variable_get(:@@var1) end 

我在寻找答案时偶然发现了https://www.ruby-forum.com/topic/1228428 。 他们谈论的是1.8.7,但它似乎也适用于更高版本。