繁体   English   中英

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

[英]Creating a function handle to an overloaded `end` function

MATLAB允许为自定义类重载各种运算符 其中一个未列出的可重载运算符已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命令行中粘贴并按“Open Selection”转到它的定义;它在...\\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函数的句柄?

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


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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM