如何从 Class 中动态地 add/extend 方法?
How can I dynamically add/extend methods from a Class?
我在音频应用程序环境中使用 Ruby 组件。此 Ruby 组件由 RubyEdit
class 的实例表示。这提供了我的 Ruby 代码和环境之间的接口。
例如,如果我写 self
,它会输出代表该组件的 RubyEdit class 的实例:
好的是我 can/must "implement/extend" 一些方法 RubyEdit
在获得一些事件时会调用。我可以为该实例定义自定义方法 event
:
def event
# my own event code
end
当环境在此 Ruby 组件之外获得一些事件时将调用它。或者我可以调用一个名为 redraw
的 class method
,它会调用我的自定义方法 draw
:
def draw
# my own draw code (this will called after invoking redraw from Ruby Component)
end
我需要了解此过程的一些层次结构,因此我正在 Ruby 中模拟 RubyEdit
class。
它看起来如何?我的意思是:我如何提供将被定义的方法 "later"?
这就是Ruby我认为编辑后的样子:
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
方法。接口?
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
我在音频应用程序环境中使用 Ruby 组件。此 Ruby 组件由 RubyEdit
class 的实例表示。这提供了我的 Ruby 代码和环境之间的接口。
例如,如果我写 self
,它会输出代表该组件的 RubyEdit class 的实例:
好的是我 can/must "implement/extend" 一些方法 RubyEdit
在获得一些事件时会调用。我可以为该实例定义自定义方法 event
:
def event
# my own event code
end
当环境在此 Ruby 组件之外获得一些事件时将调用它。或者我可以调用一个名为 redraw
的 class method
,它会调用我的自定义方法 draw
:
def draw
# my own draw code (this will called after invoking redraw from Ruby Component)
end
我需要了解此过程的一些层次结构,因此我正在 Ruby 中模拟 RubyEdit
class。
它看起来如何?我的意思是:我如何提供将被定义的方法 "later"?
这就是Ruby我认为编辑后的样子:
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
方法。接口?
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