Ruby在类外创建实例变量

时间:2011-04-16 02:18:05

标签: ruby instance-variables

在任何类定义之外的文件中创建实例变量(例如@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 个答案:

答案 0 :(得分:14)

一切都是红宝石中的一个对象。所以你现在实际上在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