Ruby在类外创建实例变量

11

在任何类定义之外创建一个实例变量,比如说@foo,是什么意思呢?假设有一个名为test.rb的文件,该文件的全部内容如下所示。

# test.rb
@foo = "bar"
puts @foo

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

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

a.rb的内容

@me = self
@a = "from-a"

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]
1个回答

18

在Ruby中,每个东西都是一个对象。所以你现在实际上是在 Object 的一个实例——main对象中。

如果在你的文件中输入 puts self.class,你会看到你是在 main 下运行,并且类是 Object

即使在irb中也是如此:

ruby-1.9.2-p136 :001 > self
 => main 
ruby-1.9.2-p136 :002 > self.class
 => Object 

mainObject 的一个实例,它是一切操作的基础吗? - Anurag
在多用户Web应用程序中,主对象如何共享?例如,假设我在Rails或Sinatra应用程序中导入一个名为“x.rb”的文件。如果一个用户请求调用该文件中设置@a = 5的方法,然后另一个用户调用该文件中检索@a的方法,第二个用户会收到值5吗?还是Rails / Sinatra为每个单独的用户请求创建该文件的对象类的单独实例? - johnsimer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接