【发布时间】:2011-01-25 01:46:39
【问题描述】:
我将在代码中解释我在寻找什么,因为那可能是最简洁的:
module Mixin
def method
puts "Foo"
end
end
class Whatever
include Mixin
end
w = Whatever.new
w.method
=> "Foo"
# some magic here
w2 = Whatever.new
w.method
=> NoMethodError
我曾尝试使用 remove_const 取消定义 Mixin 模块,但这似乎对无论什么都没有任何影响。我曾假设 #include 只是将对该模块的引用添加到类的方法解析链中 - 但这种行为与此不符。
谁能告诉我 include 在幕后实际上做了什么,以及如何扭转这种情况?
【问题讨论】:
-
想要这样做的原因是因为我们为 merb 编写的 gem 将替换现有的表单助手,我们需要以某种方式删除它们。因此我不能真正改变第一个模块的包含方式,只能改变之后可以做的事情。
标签: ruby class metaprogramming