我想猴子打一个宝石,目标代码在模块中。 不幸的是,在我准备补丁时,该模块已经包含在各种类中,新代码无效。
示例:
module Feature
def action
puts "Feature"
end
end
module Patch
def action
puts "Patch"
end
end
class Base1
include Feature
end
Feature.prepend Patch
class Base2
include Feature
end
Base1.new.action # Returns "Feature", I want it to be "Patch" instead.
Base2.new.action # Returns "Patch"
当我在Feature
之前加入Base2
时,补丁程序就可以使用,但是对于真正的宝石,我无法更改顺序。
是否有一种优雅的方法来解决此问题?还是必须遍历ObjectSpace
来查找哪些类已经包含Feature
模块?
答案 0 :(得分:0)
Entry** elements[capacity] = malloc(sizeof(Entry*) * capacity)
在module Feature
def action
puts "Feature"
end
end
class Base
include Feature
end
之后,您唯一的选择是在代码中所需的位置重新定义要更改的include Feature
的实例方法。
Feature