在任何类定义之外的文件中创建实例变量(例如@foo
)意味着什么。假设有一个文件test.rb,文件的全部内容如下所示。
# test.rb
@foo = "bar"
puts @foo
它打印"bar"
,但这是某种包装类中的实例变量吗?
使用两个文件进行测试表明存在一个main
对象,其中包含所有内容。这种理解是否正确?
a.rb的内容
@me = self
@a = "from-a"
b.rb的内容
require "./a"
@b = "from-b"
puts @me == self # true (self refers to the same object)
puts self.class # Object
puts self.instance_variables # [@a, @b, @me]
答案 0 :(得分:14)
一切都是红宝石中的一个对象。所以你现在实际上在main
对象中,这是Object
的一个实例。
在您的文件中,如果您放置puts self.class
,则会看到您在main
下运行,而该课程为Object
。
即使在irb中,例如:
ruby-1.9.2-p136 :001 > self
=> main
ruby-1.9.2-p136 :002 > self.class
=> Object