Ruby在类外创建实例变量

Anu*_*rag 10 ruby instance-variables

创建实例变量意味着什么,例如@foo在任何类定义之外的文件中.假设有一个文件test.rb,下面给出了该文件的全部内容.

# test.rb
@foo = "bar"
puts @foo
Run Code Online (Sandbox Code Playgroud)

它打印"bar",但这是某种包装类中的实例变量吗?

使用两个文件进行测试表明存在一个main包含所有内容的对象.这种理解是否正确?

a.rb的内容

@me = self
@a = "from-a"
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*wis 15

一切都是红宝石中的一个对象.所以你现在实际上是在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 
Run Code Online (Sandbox Code Playgroud)