MATLAB中匿名函数(anonymous function)与函数句柄(function handle)的区别?
MATLAB里匿名函数和函数句柄到底啥区别?
先搞懂两个概念的本质
- 函数句柄(Function Handle):这是MATLAB里的一种特殊数据类型,说白了就是个「函数引用」——它能指向任何可调用的MATLAB函数,不管是系统自带的内置函数、你自己写的m文件函数、嵌套在其他函数里的内部函数,甚至是匿名函数都行。比如:
- 指向内置正弦函数:
sin_h = @sin - 指向你写的自定义函数:
my_func_h = @my_calculate - 指向匿名函数:
anon_h = @(x) x.^2
- 指向内置正弦函数:
- 匿名函数(Anonymous Function):这是一种不用单独写m文件的「临时小函数」,只能通过
@(输入参数) 表达式这种语法直接定义。当你这么写的时候,得到的结果就是一个指向这个匿名函数的函数句柄。
核心区别点
- 范围不一样:函数句柄是个大范畴,匿名函数只是它能指向的其中一种函数类型。
- 存在形式不同:匿名函数没有独立的文件,是临时定义的一次性小函数;而函数句柄可以指向有单独m文件的正规函数,也能指向系统内置函数。
- 用法场景有差:
- 函数句柄主要用来「传递函数」——比如给
fminsearch(求极值)、integral(积分)这类需要输入函数的工具函数传参,或者在不同工作区里调用某个函数。 - 匿名函数适合快速写个简单的、只用一次的小逻辑,比如临时算个表达式,犯不上专门写个m文件。
- 函数句柄主要用来「传递函数」——比如给
看例子更清楚
% 1. 给内置余弦函数创建句柄 h1 = @cos; h1(pi) % 输出 -1 % 2. 定义匿名函数,得到的是它的句柄 h2 = @(x) x.^3 + 2*x; h2(2) % 输出 12 % 3. 假设你写了个my_add.m文件:function y = my_add(a,b) y=a+b; end h3 = @my_add; h3(3,5) % 输出 8
这里h1、h2、h3全都是函数句柄,但只有h2指向的是匿名函数。
内容的提问来源于stack exchange,提问作者Cris Luengo
相关产品推荐
相关产品推荐

