如何从类中动态添加/扩展方法?

时间:2016-02-26 13:25:15

标签: ruby oop class-method instance-method

我在音频应用程序环境中使用Ruby组件。这个Ruby组件由RubyEdit类的实例表示。这提供了我的Ruby代码和Environment之间的接口。

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

enter image description here

好处是我可以/必须“实现/扩展”RubyEdit在获取某些事件时会调用的一些方法。我可以为该实例定义我的自定义方法event

def event
    # my own event code
end

当环境在这个Ruby组件之外获得一些事件时,它将被调用。或者我可以拨打名为class method的{​​{1}},它会调用我的自定义方法redraw

draw

我需要了解这个过程的一些层次结构,所以我在Ruby中模拟了 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方法。接口

1 个答案:

答案 0 :(得分: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