我有一个缓存评估的功能。作为参数之一,它需要一个函数句柄。在某些情况下,函数句柄是不可访问的,我不太明白为什么。下面的示例显示了让我难过的原因:
>> A.a = @plus; feval(@A.a, 1, 1)
ans =
2
>> clear A
>> A.a.a = @plus; feval(@A.a.a, 1, 1)
Error using feval
Undefined function 'A.a.a' for input arguments of type 'double'.
所以,如果我有一个存储为结构成员的函数句柄,如果它是一层深,我可以很好地传递它,但如果它是两层深则不行。在我的真实用例中,我有一个结构D
,其中包含许多(117)个不同类的实例,所以我实际上有stct.obj.meth
, wherestct
是一个结构,obj
是一个类实例/对象,meth
是一个方法。传递@stct.obj.meth
失败,但如果我分配A = stct.obj
,则传递@A.meth
成功。
在什么情况下我可以将函数句柄作为参数传递,以便它仍然可以在堆栈中访问?
编辑:虽然在上面的用例中,我可以简单地删除@
因为@plus
已经是一个函数句柄。但是,请考虑这里的情况:
>> type cltest.m
classdef cltest < handle
methods
function C = mymeth(self, a, b)
C = a + b;
end
end
end
>> A.a = cltest();
>> feval(@A.a.mymeth, 1, 1)
Error using feval
Undefined function 'A.a.mymeth' for input arguments of type 'double'.
>> b = A.a;
>> feval(@b.mymeth, 1, 1)
ans =
2
在这种情况下,我需要之前...@
A.a.mymeth