我需要创建类的路径副本,其中对一个模块方法的调用被替换为另一个模块方法调用:
module Foo
def self.check
"foo"
end
end
module Bar
def self.check
"bar"
end
end
class Bark
def call
puts Foo.check
end
end
Bark.new.call => "foo"
Meouw = Bark.dup
...
???
Meouw.new.call => "bar"
你知道我该怎么做吗?
3条答案
按热度按时间lp0sw83n1#
不是问题的答案,因为它被问到,但在我看来,你是试图解决一个XY问题,这不是要走的路。
您需要做的是注入依赖项,而不是对其进行硬编码。
然后使用所需的模块示例化
Bark
类,以获得具有所需行为的对象:qni6mghb2#
奇怪的问题需要奇怪的解决方案。你可以定义
Meouw::Foo
,并使其引用Bar
:这样,
Meouw
中的Foo
将解析为Meouw::Foo
(实际上是::Bar
),而不是全局::Foo
:4xrmg8kj3#
为什么不能保持简单,从
Bark
继承并覆盖call
方法呢?如果您想要 meta更多,也可以使用
Class.new