什么是函数句柄,它有什么用处? [英] What is a function handle and how is it useful?

查看:38
本文介绍了什么是函数句柄,它有什么用处?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

谁能给我解释一下@(函数句柄)运算符的含义以及为什么要使用它?

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

请注意,这两个不同的计数器是独立运行的.函数句柄 fhfh2 指向函数 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.

这篇关于什么是函数句柄,它有什么用处?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆