什么是函數句柄?
函數句柄是一種存儲指向函數的關聯關系的 MATLAB® 數據類型。間接調用函數使您在調用該函數時無需考慮調用位置。函數句柄的典型用法包括:
- 將一個函數傳遞到另一個函數(通常稱為復合函數)。例如,將函數傳遞到
integral
和fzero
等積分和優化函數。 - 指定回調函數(例如,響應 UI 事件或與數據采集硬件交互的回調)。
- 構造以內聯方式定義而非存儲在程序文件(匿名函數)中的函數的句柄。
- 從主函數外調用局部函數。
您可以使用 isa``(h,'function_handle')
來查看變量 h
是否為函數句柄
創建函數句柄
通過在函數名稱前添加一個 @
符號來為函數創建句柄。例如,假設您有一個名為 computeSquare
的函數,該函數定義為:
function y = computeSquare(x)
y = x.^2;
end
則可以創建句柄並調用該函數以計算 4 的平方。
f = @computeSquare;
a = 4;
b = f(a)
函數句柄是您可傳遞給其他函數的變量。例如,計算 x2 在區間 [0,1] 上的積分。
q = integral(f,0,1);
函數句柄會存儲其絕對路徑,因此如果您有有效句柄,則可以從任意位置調用該函數。您不必在創建句柄時指定函數路徑,只需指定函數名。
匿名函數
您可以創建指向匿名函數的句柄。匿名函數是基於單行表達式的 MATLAB 函數,不需要程序文件。構造指向匿名函數的句柄,方法是定義 anonymous_function
函數主體,以及指向匿名函數 arglist
的以逗號分隔的輸入參數列表。語法為:
h = @(arglist)anonymous_function
例如,創建一個指向用於計算平方數的匿名函數的句柄 sqr
,並使用其句柄調用該匿名函數。
sqr = @(n) n.^2;
x = sqr(3)
由函數句柄組成的數組
您可以通過將函數句柄收集到一個元胞數組或結構體數組中,來創建由這些函數句柄組成的數組。例如,使用元胞數組:
C = {@sin, @cos, @tan};
C{2}(pi)
ans =
-1
或使用結構體數組:
S.a = @sin; S.b = @cos; S.c = @tan;
S.a(pi/2)