Ruby создает переменные экземпляра вне класса - PullRequest
10 голосов
/ 16 апреля 2011

Что означает создание переменной экземпляра, скажем, @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 Ответ

15 голосов
/ 16 апреля 2011

Все является объектом в рубине.Таким образом, вы сейчас находитесь в 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 
...