Рубиновый класс << Klass = Module::new
У меня есть следующий синтаксис в фрагменте кода, и я не уверен, что он делает.
class << PushableModule = Module::new
def new *args, &blk
m = Module::new( *args, &blk )
m.extend Pushable
m
end
end
Во-первых, класс или модуль PushableModule
не существует в файле / программе, и, во-вторых, кажется, что я получаю его собственный класс, а затем устанавливаю его равным Module::new
до определения блока, который я просто не понимаю. Может кто-нибудь объяснить мне это (а также то, что на самом деле делает фрагмент кода)?
1 ответ
Вы неправильно указали приоритет оператора. Это значит
class << (PushableModule = Module::new)
...
end
Это создает модуль Module::new
, затем называет это как PushableModule
затем открывает свой собственный класс <<
,
Это переписывает конструктор PushableModule
, поскольку new
должен быть определен как PushableModule.new
, а не как метод экземпляра, определение выполняется в собственном классе.
Обычно вы не перезаписываете new
, но определить метод экземпляра initialize
, но в некоторых особых случаях new
Конструктор может быть переписан.