module EventSubscriber
def method_missing(method_name, *args)
if method_name[/^subscribe_to_(.*)/]
class << self
define_method(method_name) do |*arguments|
# ....
end
end
send(method_name, *args)
else
super
end
end
end
EventSubscriber
- это модуль, который смешивается в классы для подписки на события. Если вызывается метод с именем subscribe_to_*
, он определяется (чтобы избежать дополнительных затрат method_missing
), а затем вызывается. Как я могу перенести эту переменную в область видимости?
Проблема внутри класса singleton, method_name
, кажется, не доступен. Ruby жалуется на «неопределенную локальную переменную или метод».
Я знаю, что мог бы сделать это, используя self.class.send(:define_method ..)
, но я бы предпочел не делать этого, если мне не придется Я предпочитаю этот формат.