班级以外的红宝石

0xS*_*ina 1 ruby

我可以在课外定义@some_ivar.这个ivar属于哪个类,它的范围是什么?

例如,我可以在example.rb中说

@var = "Hi"
Run Code Online (Sandbox Code Playgroud)

在irb中,我可以要求example.rb并访问@var

Ser*_*sev 7

该var属于一个名为的顶级对象main.

$ irb
1.9.3p0 :001 > @var = 'Hi'
 => "Hi" 
1.9.3p0 :002 > self
 => main 
1.9.3p0 :003 > @var
 => Hi
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)