我有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.."
这可能是一个非常简单的查询,但请回答。 感谢
答案 0 :(得分:4)
现在我想从每个模块调用met1。是否可以这样做?
是可能的。使用Module#instance_method
创建第一个UnboundMethod
。然后调用UnboundMethod#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 ..."