[英]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.