2012-02-01 32 views
1

我可以在班級外面定義@some_ivar。這個ivar屬於哪一類,它的範圍是什麼?ruby​​ ivar以外的班級

例如, 我可以example.rb說

@var = "Hi" 

和IRB,我可以要求example.rb和訪問@var

回答

7

這變種屬於稱爲頂級對象main

$ irb 
1.9.3p0 :001 > @var = 'Hi' 
=> "Hi" 
1.9.3p0 :002 > self 
=> main 
1.9.3p0 :003 > @var 
=> Hi 

main基本上是一個有趣的屬性的對象:提供給所有對象在其上下文中定義的任何方法(「正常」的類外)變。

$ irb 
1.9.3p0 :001 > def foo 
1.9.3p0 :002?> 1 
1.9.3p0 :003?> end 
=> nil 
1.9.3p0 :004 > Object.new.foo 
=> 1 
1.9.3p0 :005 > "".foo 
=> 1 
+0

感謝。 man .... ruby​​很奇怪(好方法:P) – 0xSina 2012-02-01 20:45:55

+0

至少在Ruby 1.9.2中,'main'中定義的方法似乎是對象的私有方法( - >'private method'foo'called for# <對象:0x0000020bf539c8>')。 – 2012-02-01 21:38:52