问题描述
谁能给我解释一下@
(函数句柄)运算符的含义以及为什么要使用它?
Can somebody explain to me the meaning of the @
(function handle) operator and why to use it?
推荐答案
函数句柄运算符 在 MATLAB 中的作用本质上就像一个指向函数特定实例的指针.其他一些答案已经讨论了它的一些用途,但我将在这里添加另一个我经常使用的用途:保持对不再在范围内"的函数的访问.
The function handle operator in MATLAB acts essentially like a pointer to a specific instance of a function. Some of the other answers have discussed a few of its uses, but I'll add another use here that I often have for it: maintaining access to functions that are no longer "in scope".
例如下面的函数初始化一个值count
,然后返回一个函数句柄给嵌套函数increment
:
For example, the following function initializes a value count
, and then returns a function handle to a nested function increment
:
function fHandle = start_counting(count)
disp(count);
fHandle = @increment;
function increment
count = count+1;
disp(count);
end
end
由于函数 increment
是一个 嵌套函数,只能在start_counting
函数内使用(即start_counting
的工作空间是它的作用域").但是,通过返回函数increment
的句柄,我仍然可以在start_counting
之外使用它,并且它仍然保留对start_counting工作区中变量的访问代码>!这让我可以这样做:
Since the function increment
is a nested function, it can only be used within the function start_counting
(i.e. the workspace of start_counting
is its "scope"). However, by returning a handle to the function increment
, I can still use it outside of start_counting
, and it still retains access to the variables in the workspace of start_counting
! That allows me to do this:
>> fh = start_counting(3); % Initialize count to 3 and return handle
3
>> fh(); % Invoke increment function using its handle
4
>> fh();
5
注意我们如何在函数start_counting
之外继续增加计数.但是您可以通过使用不同的数字再次调用 start_counting
并将函数句柄存储在另一个变量中来做一些更有趣的事情:
Notice how we can keep incrementing count even though we are outside of the function start_counting
. But you can do something even more interesting by calling start_counting
again with a different number and storing the function handle in another variable:
>> fh2 = start_counting(-4);
-4
>> fh2();
-3
>> fh2();
-2
>> fh(); % Invoke the first handle to increment
6
>> fh2(); % Invoke the second handle to increment
-1
请注意,这两个不同的计数器是独立运行的.函数句柄 fh
和 fh2
指向函数 increment
的不同实例,不同的工作区包含 count
的唯一值.
Notice that these two different counters operate independently. The function handles fh
and fh2
point to different instances of the function increment
with different workspaces containing unique values for count
.
除上述之外,将函数句柄与嵌套函数结合使用还有助于简化 GUI 设计,正如我在 其他所以发帖.
In addition to the above, using function handles in conjunction with nested functions can also help streamline GUI design, as I illustrate in this other SO post.
这篇关于什么是函数句柄,它有什么用处?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!