gpt4 book ai didi

ruby - 即时将所有方法从一个类复制到另一个类

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:51 25 4
gpt4 key购买 nike

我有两个类,我想将所有方法从一个类复制到另一个类。有些方法没有参数,有些方法有参数,有些方法有散列作为参数。而且我永远不会事先知道哪些会。所以我创建了这段代码,直到我发现它没有考虑参数。有什么方法可以从类中获取方法列表,然后将它们准确地克隆到另一个类中?

def partial(cls)
cls.instance_methods(false).each do |method_name|
define_method(method_name) do
cls.new.method(method_name.to_sym).call
end
end
end

这些方法是在第一个类中使用 define_method 即时创建的,所以我不能只使用 include。上面的代码传入了 cls,然后它找到了该类中实际编写的所有实例方法,而不是它继承的实例方法,然后创建一个具有相同名称的新方法。当那个方法被调用时,它实际上调用了另一个类的同名方法。这非常有效,除非我有 args。我进行了条件检查以查看它是否有参数,然后让它调用带参数的方法,但它不能很好地处理哈希。它将散列作为参数的数组,这不是我想要的。

我想知道是否有一种简单的方法可以直接说“嘿,你知道这个方法,不管它是什么,从字面上为另一个类做同样的事情。”

最佳答案

你也可以试试 DelegateClass :

class NamedArray < DelegateClass(Array)
def initialize n
@name = n
super(Array.new)
end
def sayName
"My name is #{@name}"
end
end

关于ruby - 即时将所有方法从一个类复制到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775709/

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