从函数句柄获取meta.method?

时间:2014-01-27 12:51:34

标签: matlab metaclass

假设我有一个方法的函数句柄:

fc = @ici.get_performance;

,事实上,由Matlab翻译为

fc = @(varargin)ici.get_performance(varargin{:})

有没有直接或间接的方法来获取相应的meta.method对象?以下作品:

m = metaclass(ici); fc2 = m.MethodList(strcmp({m.MethodList.Name}, 'get_performance'));

但是如何获取fc绑定到的对象的引用,我可以传递给metaclassmeta.method(fc)导致错误(抽象类无法实例化。类'meta.method'被声明为Abstract。),而metaclass(fc)给我function_handle类。

用例是我想编写一个辅助函数来告诉我在一个特定方法中定义了什么文件,并且传递函数句柄应该是最直接的。

1 个答案:

答案 0 :(得分:2)

我想你会在这里挣扎。像@ici.get_performance这样的普通函数句柄实际上只知道该函数的字符串名称。特别是,它不是类ici的实例方法的句柄 - 但它可能是该类的静态方法的句柄,或者包ici中的自由函数。

MATLAB根据输入参数调度对象方法,我们可以在这里看到

h1 = @MException.getReport
h2 = @getReport
obj = MException('some:id', 'some string')
h1(obj) % fails - no such method
h2(obj) % succeeds.

总之,我认为你实际上需要使用MATLAB的WHICH函数;然而,不幸的是,这可能是有问题的,因为它实际上并不适合这种类型的程序化使用。