我有 2 个模块 M1 和 M2,每个模块都包含与 met1 相同的方法名称
我有一个包含这些模块的 MyClass 类。 我创建了 MyClass 的实例测试,现在我想从每个模块调用 met1。 有可能吗?
代码如下:
module M1
def met1
p "from M1 met1.."
end
end
module M2
def met1
p "from M2 met1 ..."
end
end
class MyClass
include M1, M2
def met2
p "met2 from my class"
end
end
test = MyClass.new
test.met1 # From module 1
test.met2 # from my class
test.met1 # from module 2 (how to ?)
请告诉我该怎么做。
我的输出是
"from M1 met1.."
"met2 from my class"
"from M1 met1.."
这可能是一个非常简单的查询,但请回答。 谢谢
最佳答案
now I want to call met1 from each module. Is it possible to do so?
是的,有可能。使用 Module#instance_method
创建第一个 UnboundMethod
。然后调用UnboundMethod#bind
绑定(bind) test
对象。现在你有 Method
反对你。所以现在打电话Method#call
以获得预期的输出。
module M1
def met1
p "from M1 met1.."
end
end
module M2
def met1
p "from M2 met1 ..."
end
end
class MyClass
include M1, M2
def met2
p "met2 from my class"
end
end
test = MyClass.new
test.class.included_modules.each do |m|
m.instance_method(:met1).bind(test).call unless m == Kernel
end
# >> "from M1 met1.."
# >> "from M2 met1 ..."
关于Ruby - 使用类实例访问来自不同模块的相同命名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029060/