Если я запустил этот файл как "ruby x.rb
":
class X
end
x = X.new
В чем дело, вызывающее "X.new
"?
Является ли это объектом/процессом/etc?
Если я запустил этот файл как "ruby x.rb
":
class X
end
x = X.new
В чем дело, вызывающее "X.new
"?
Является ли это объектом/процессом/etc?
Все в Ruby происходит в контексте некоторого объекта. Объект на верхнем уровне называется "основным". Это в основном экземпляр объекта со специальным свойством, что любые методы, определенные там, добавляются как методы экземпляра объекта (поэтому они доступны повсюду).
Итак, мы можем сделать script, состоящий полностью из:
puts object_id
@a = 'Look, I have instance variables!'
puts @a
и он напечатает "105640" и "Посмотрите, у меня есть переменные экземпляра!".
Это не то, что вам обычно нужно заботиться, но оно есть.
Вызывающий верхнего уровня является основным объектом, который имеет класс Object.
Попробуйте эту рубиновую программу:
p self
p self.class
Это класс X. Вы вызываете метод "новый", который создает объект класса X. Итак, если вы запустите этот текст как script, Ruby:
new
является одним.x
new
для этого нового класса x
, создавая объект экземпляра X; x получает ссылку на этот объект.Это интерпретатор ruby, выполняющий строку
x = X.new
Как и во многих языках сценариев, script интерпретируется сверху вниз, а не имеет стандартный метод точки входа, как большинство скомпилированных языков.
Как сказал Чарли Мартин, X.new - это вызов конструктора класса X, который возвращает объект типа X, хранящийся в переменной x.
Основываясь на вашем названии, я думаю, что вы ищете немного больше. Ruby не нуждается в основном, он выполняет код в том порядке, в котором он его видит. Поэтому зависимости должны быть включены до их вызова.
Таким образом, ваш основной код - это код процедурного стиля, который написан за пределами определения класса или модуля.