我有一个Matlab
个对象的单元格数组,类似于:
objs = {Object1(), Object2(), Object3()};
这些对象都是不同的类型。他们中的一些人会有一个方法,我们称之为myMethod()
。我想做点什么:
for o = objs
if hasMethod(o, 'myMethod()')
o.myMethod();
end
end
我的困难在于我不知道该怎么办hasMethod
- exist
在这里似乎没什么用。
我可以使用try - catch
,但我宁愿做一些更整洁的事情。有没有办法做到这一点?我应该改变我的设计吗?
答案 0 :(得分:3)
if any(strcmp(methods(o), 'myMethod'))
o.myMethod();
end
答案 1 :(得分:3)
另一种选择是使用元类。
obmeta = metaclass(ob);
methodNames = cellfun(@(x){x.Name},obmeta.Methods);
您还可以从obmeta.Methods
获取
此外,metaclass
可以从类的名称构造,没有实例,这在某些情况下可能是有利的。
答案 2 :(得分:2)
答案 3 :(得分:1)
你为什么要那样做?你最好有充分的理由:p
最好让它们从超类继承一般函数。然后你可以为所有这些函数调用该函数,而不是查找它是哪个类/检查函数是否存在然后根据结果调用函数(这不是非常OO)
答案 4 :(得分:0)