Как я могу динамически добавлять / расширять методы из класса?
Я использую Ruby Component в среде аудио приложения. Этот компонент Ruby представлен экземпляром RubyEdit
учебный класс. Это обеспечивает интерфейс между моим кодом Ruby и окружающей средой.
Например, если я напишу self
он выводит экземпляр класса RubyEdit, который представляет этот компонент:
Приятно то, что я могу / должен "реализовать / расширить" некоторые методы, которые RubyEdit
позвоню, когда получу какие-нибудь события. Я могу определить свой собственный метод event
для этого экземпляра:
def event
# my own event code
end
и он будет вызван, когда Среда получит некоторые события вне этого компонента Ruby. Или я могу позвонить class method
называется redraw
и он будет вызывать мой пользовательский метод draw
:
def draw
# my own draw code (this will called after invoking redraw from Ruby Component)
end
Мне нужно понять некоторую иерархию этого процесса, поэтому я делаю симуляцию этого RubyEdit
класс в рубине.
Как это будет выглядеть? Я имею в виду: как я могу предоставить методы, которые будут определены "позже"?
Вот как будет выглядеть RubyEdit:
class RubyEdit
def self.redraw
# calling this class method should invoke my extended draw method
end
def draw
end
def event
end
end
но я не понимаю, как разместить event
а также draw
методы расширяемые. Интерфейсы?
1 ответ
module ExtendRubyEdit
def self.included(base)
base.extend(ClassMethods)
end
def draw
end
def event
end
module ClassMethods
def redraw
end
end
end
class RubyEdit
include ExtendRubyEdit
end