На языке программирования Ruby я создаю класс с макросом уровня класса следующим образом:
class Timer
def self.add_time
def time
STDERR.puts Time.now.strftime("%H:%M:%S")
end
end
end
Метод класса add_time
при выполнении генерирует time
метод. Теперь я могу выполнить этот макрос уровня класса в другом классе Example
следующим образом:
class Example < Timer
add_time
end
Когда я сейчас вызываю time
для экземпляра класса Example
, метод time
присутствует там, как я и предполагал:
ex = Example.new
ex.time
и печатает текущее время: 23:18:38
.
Но теперь я хотел бы поместить макрос add_time
в модуль и по-прежнему иметь тот же общий эффект. Я пытался с include
следующим образом:
module Timer
def self.add_time
def time
STDERR.puts Time.now.strftime("%H:%M:%S")
end
end
end
class Example
include Timer
add_time
end
ex = Example.new
ex.time
, но затем я получаю сообщение об ошибке, что метод add_time
не определен в классе Example
: NameError: undefined local variable or method ‘add_time’ for Example:Class
. Затем я попытался использовать extend
вместо этого, как это:
class Example
extend Timer
add_time
end
, но это дает мне похожую ошибку.
Итак, вопрос: Как я могу получить то же самое эффект, как в моем первоначальном примере, где Timer
был определен как класс, но вместо него используется модуль?