Если я запускаю этот файл как "ruby x.rb
":
class X
end
x = X.new
Что за штука звонит "X.new
"?
Это объект/процесс/и т.д.?
Если я запускаю этот файл как "ruby x.rb
":
class X
end
x = X.new
Что за штука звонит "X.new
"?
Это объект/процесс/и т.д.?
Все в Ruby происходит в контексте некоторого объекта. Объект на верхнем уровне называется «главным». По сути, это экземпляр Object со специальным свойством, заключающимся в том, что любые определенные там методы добавляются как методы экземпляра Object (поэтому они доступны везде).
Итак, мы можем сделать скрипт, полностью состоящий из:
puts object_id
@a = 'Look, I have instance variables!'
puts @a
и он напечатает «105640» и «Смотрите, у меня есть переменные экземпляра!».
Это не то, чем вам обычно нужно заниматься, но это есть.
main
. Не уверен, и не уверен, насколько применимо все это здесь. Конечно, Ruby находится под влиянием Smalltalk. Но чтобы отправить сообщение явно, мы делаем X.send(:new)
, а не send(X, :new)
. Ни то, ни другое в Smalltalk. И у нас есть метод caller
, а не sender
. Поэтому я думаю, что использование Smalltalk надумано. И это термины, которые я предлагаю обдумать. main
— звонящий. main
вызывает метод new
в классе X
.
- person x-yuri; 28.05.2021
Вызывающий объект верхнего уровня — это объект main, относящийся к классу Object.
Попробуйте эту рубиновую программу:
p self
p self.class
Это Х класс. Вы вызываете метод new, который создает объект класса X. Итак, если вы запустите этот текст как скрипт, Ruby:
new
.x
new
для этого нового класса X
, создавая объект экземпляра X; x получает ссылку на этот объект.Это рубиновый интерпретатор, работающий на линии
x = X.new
Как и во многих языках сценариев, сценарий интерпретируется сверху вниз, а не имеет стандартного метода точки входа, как большинство скомпилированных языков.
main
с точки зрения программиста на C. Все остальные здесь, кажется, думают об объекте верхнего уровня с именем main
в Ruby, что не совсем одно и то же.
- person Ajedi32; 01.07.2015
Как сказал Чарли Мартин, X.new — это вызов конструктора класса X, который возвращает объект типа X, хранящийся в переменной x.
Судя по вашему заголовку, я думаю, вы ищете немного больше. Ruby не нуждается в main, он выполняет код в том порядке, в котором его видит. Поэтому зависимости должны быть включены до их вызова.
Таким образом, ваш main — это любой код в процедурном стиле, написанный вне определения класса или модуля.