Как я могу динамически добавлять / расширять методы из класса?

Я использую 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
Другие вопросы по тегам