2012-02-01 2 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

+0

По крайней мере, в Ruby 1.9.2 методы, определенные в 'main', кажутся частными для объектов (->' private method 'foo', вызываемых для # <Объект: 0x0000020bf539c8> '). –

Смежные вопросы