2011-04-16 49 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