2016-08-12 2 views
1

Когда я пишу следующую программу,Почему код внутри классов выполняется автоматически при запуске рубинового скрипта?

class Classname 
    puts "hi" 
end 

сохранить его как .rb файл и выполнить файл в терминале, то выход «привет» возвращается. Я не понимаю, почему. Разве мне не нужно назначать этот оператор puts методу, создавать объект класса Classname и затем вызывать метод на указанном объекте для получения этого вывода? Или, по крайней мере, поставить инструкцию puts в метод инициализации класса, а затем создать объект? Почему это работает так, как есть?

+3

, когда вы используете ключевое слово 'class' для определения класса, он фактически создает новый объект' Class' и выполняет внутренний код в своем контексте. см. http://stackoverflow.com/a/9202363/591495 – oldrinb

+0

Как вы определяете методы, если код внутри класса не был выполнен? Как бы вы назвали метод attr_accessor', если код внутри класса не был выполнен? Как создать экземпляр, если класс определения инициализации не был выполнен до инициализации объекта? Почему определение метода 'initialize' должно выполняться снова и снова для каждого созданного вами экземпляра? –

ответ

4

Рубин является языком сценариев, который означает, что вы можете просто написать

puts 'hi' 

в файл без определения какого-либо класса или методов. Точно так же, когда вы определяете класс, вы фактически выполняете код для определения класса, и вы можете выполнять код, подобный тому, который имеет побочные эффекты, такие как puts 'hi'. Это полезно, потому что метапрограммирование часто используется в Ruby для определения классов.

Смежные вопросы