gpt4 book ai didi

Ruby - 使用类实例访问来自不同模块的相同命名方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:14 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com