Рубин Ивар вне класса - PullRequest
       1

Рубин Ивар вне класса

1 голос
/ 02 февраля 2012

Я могу определить @some_ivar вне класса.К какому классу принадлежит этот ivar и какова его область действия?

Например, я могу сказать в example.rb

@var = "Hi"

, а в irb мне может потребоваться example.rb иaccess @ var

1 Ответ

7 голосов
/ 02 февраля 2012

Эта переменная принадлежит объекту верхнего уровня с именем 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...