Причина, по которой он печатает что-то, заключается в том, что в процессе определения класса A
вы спрашивали это. Все, что находится внутри блока class
, рассматривается как обычный код Ruby, оно не является специальным, поэтому печать, выход, создание сетевых подключений, открытие файлов - все работает, как и везде.
Это резко контрастирует с такими вещами, как JavaScript и C ++, где это абсолютно недопустимо.
Ruby, будучи динамическим c языком программирования, имеет гораздо больше возможностей. Это допускает такие вещи, как определение методов, основанных на вводе данных из файлов, или почти все, что вы можете себе представить.
Название этого поведения в основном является "оценочным", например, когда Ruby оценивает этот код, то есть он анализирует и запускает его.
Это позволяет вам делать вещи в Ruby, что невозможно на других языках, без использования макросов, приемов препроцессора или других методов:
class A
if (Date.today.saturday? or Date.today.sunday?)
def party!
:on
end
end
end
Где это будет определять метод party!
только когда код запускается в выходные дни.