gpt4 book ai didi

oop - 对象上的测试方法存在

转载 作者:行者123 更新时间:2023-12-02 06:39:38 24 4
gpt4 key购买 nike

我有一个 Matlab 对象的元胞数组,类似于:

objs = {Object1(), Object2(), Object3()};

这些对象都是不同类型的。其中一些会有一个方法,我们称它为 myMethod()。我想做类似的事情:

for o = objs
if hasMethod(o, 'myMethod()')
o.myMethod();
end
end

我的困难是我不知道如何做 hasMethod - exist 在这里似乎没有帮助。

我可以使用 try - catch,但我宁愿做一些更整洁的事情。有没有办法做到这一点?我应该改为更改我的设计吗?

最佳答案

另一种选择是使用元类。

  obmeta = metaclass(ob);
methodNames = cellfun(@(x){x.Name},obmeta.Methods);

您还可以从 obmeta.Methods 中获取其他信息,例如

  • 输入/输出参数的数量。
  • 访问类型
  • 在哪个类中定义了该方法。

此外,元类 可以根据类的名称构造,无需实例,这在某些情况下可能是一个优势。

关于oop - 对象上的测试方法存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10537491/

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