2016-02-26 65 views
0

我在音频应用程序环境中使用Ruby组件。此Ruby组件由RubyEdit类的实例表示。这提供了我的Ruby代码和环境之间的接口。如何动态添加/扩展类的方法?

例如,如果我写self它输出表示该组件的RubyEdit类的实例:

enter image description here

的好处之一是,我可以/必须“实现/扩展”一些方法RubyEdit当它得到一些事件时会打电话。我可以定义我的自定义方法event该实例:

def event 
    # my own event code 
end 

,它会被调用当环境得到这个Ruby组件以外的一些事件。或者,我可以叫class methodredraw,它会叫我的自定义方法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 

,但我不明白如何放置eventdraw方法可扩展。接口?

回答

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