2016-02-26 10 views
0

Я использую компонент Ruby внутри звуковой среды приложения. Этот Ruby-компонент представлен экземпляром класса RubyEdit. Это обеспечивает интерфейс между моим кодом Ruby и средой.Как я могу динамически добавлять/расширять методы из класса?

Например, если я пишу self он выводит экземпляр класса RubyEdit, который представляет этот компонент:

enter image description here

славные вещи, что я могу/должен «осуществлять/расширяющие» некоторые методы, которые RubyEdit вызовет, когда он получит некоторые события. Я могу определить свой собственный метод event для этого экземпляра:

def event 
    # my own event code 
end 

и она будет называться, когда окружающая среда получить некоторые события за пределами этого рубинового компонента. Или я могу назвать class method называется redraw, и это будет вызывать мой пользовательский метод draw:

def draw 
    # my own draw code (this will called after invoking redraw from Ruby Component) 
    end 

мне нужно понять некоторую иерархию этого процесса, поэтому я делаю моделирование этого RubyEdit класса в Ruby.

Как это будет выглядеть? Я имею в виду: как я могу предоставить методы, которые будут определены «позже»?

Это как 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 методы продолжаемых. Интерфейсы?

ответ

3
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