为重载的`end`函数创建函数句柄

时间:2017-03-31 06:42:55

标签: matlab oop reserved-words class-members function-handle

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功能的句柄?

1 个答案:

答案 0 :(得分:1)

  

重载 - 如果您指定的函数在非基本MATLAB类的类中重载函数,则该函数在构造时不与函数句柄相关联。相反,MATLAB会考虑输入参数并确定在评估时调用哪个实现。

  

函数句柄存储它们的绝对路径,因此当你有一个有效的句柄时,你可以从任何位置调用该函数。创建句柄时,不必指定函数的路径,只需指定函数名称。

所以如果你的结局是'函数在matlab路径中,matlab根据输入将其视为评估的候选者,在您的情况下,如果输入对象是' table' class类型feval(str2func(' end'),i,j)评估在@ table / end.m文件夹中定义的结束函数