2011-04-16 63 views
9

在任何类定义之外的文件中创建实例变量(如@foo)意味着什么。假设有一个文件test.rb,文件的全部内容在下面给出。Ruby在类之外创建实例变量

# 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] 

回答

12

一切都在红宝石一个对象。因此,您现在实际上在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 
+0

是'main'的'Object'一切下运行一个实例? – Anurag 2011-04-16 05:47:32