MATLAB允许为自定义类重载各种operators。其中一个未列出的可重载运算符为end
,可以从\matlab\lang\end.m
中了解到:
% END(A,K,N) is called for indexing expressions involving the object A
% when END is part of the K-th index out of N indices. For example,
% the expression A(end-1,:) calls A's END method with END(A,1,2).
此类方法的一个示例是table.end
(在MATLAB命令行中粘贴并按“打开选择”以转到其定义;它在...\matlab\datatypes\@tabular\end.m
中定义。
与普通方法不同,人们不能简单地写hEnd = @end
,因为这会产生错误:
>> hEnd = @end;
hEnd = @end;
↑
Error: Illegal use of reserved keyword "end".
另一方面,编写e = str2func('end');
有效,但它链接到默认的end
函数(即使临时切换到找到所需end.m
的文件夹)。
尝试失败包括str2func('table>end');
,str2func('table\end');
,str2func('table.end');
和@(a,b,c)table.end(a,b,c);
。
我的问题:如何创建特定班级end
功能的句柄?
答案 0 :(得分:1)
重载 - 如果您指定的函数在非基本MATLAB类的类中重载函数,则该函数在构造时不与函数句柄相关联。相反,MATLAB会考虑输入参数并确定在评估时调用哪个实现。
函数句柄存储它们的绝对路径,因此当你有一个有效的句柄时,你可以从任何位置调用该函数。创建句柄时,不必指定函数的路径,只需指定函数名称。
所以如果你的结局是'函数在matlab路径中,matlab根据输入将其视为评估的候选者,在您的情况下,如果输入对象是' table' class类型feval(str2func(' end'),i,j)评估在@ table / end.m文件夹中定义的结束函数