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,但它似乎也适用于更高版本。