Ruby 如何从类中动态添加/扩展方法?
我正在音频应用程序环境中使用Ruby组件。这个Ruby组件由一个Ruby 如何从类中动态添加/扩展方法?,ruby,oop,class-method,instance-method,Ruby,Oop,Class Method,Instance Method,我正在音频应用程序环境中使用Ruby组件。这个Ruby组件由一个RubyEdit类的实例表示。这提供了Ruby代码与环境之间的接口 例如,如果我编写self,它将输出表示该组件的RubyEdit类的实例: 好的方面是,我可以/必须“实现/扩展”一些方法,RubyEdit在获得一些事件时将调用这些方法。我可以为该实例定义自定义方法event: def event # my own event code end 当环境在这个Ruby组件之外获得一些事件时,就会调用它。或者我可以调用一个名
RubyEdit
类的实例表示。这提供了Ruby代码与环境之间的接口
例如,如果我编写self
,它将输出表示该组件的RubyEdit类的实例:
好的方面是,我可以/必须“实现/扩展”一些方法,RubyEdit
在获得一些事件时将调用这些方法。我可以为该实例定义自定义方法event
:
def event
# my own event code
end
当环境在这个Ruby组件之外获得一些事件时,就会调用它。或者我可以调用一个名为重画的类方法
,它将调用我的自定义方法绘制
:
def draw
# my own draw code (this will called after invoking redraw from Ruby Component)
end
我需要了解这个过程的一些层次结构,所以我正在Ruby中模拟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
但是我不知道如何将事件
和绘制方法扩展。接口
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