簡體   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