本来这段时间一直看的是MATLAB中滤波器的设计部分,在一个群友的问题中偶尔看到了函数句柄,颇为好奇,自己确实不曾用过,今日自学了点,简单谈下对函数句柄匿名函数以及内联函数的理解。
一、函数句柄
所谓函数句柄,个人认为可以将其理解成一个函数的代号,就像一个人的名字。这样在调用时可以调用函数句柄而不用调用该函数。
语法如下:
变量名= @ 函数名;
@的作用就是将一个函数的函数句柄赋值给等号左边的变量。在调用函数时就可以调用该句柄,可以实现同样的功能。
例:
首先我们写一个求均值的函数:
function y=average(x)
y=mymean(x);
function a=mymean(v)
a=sum(v)/length(v);
定义一个数组z:
z=[1,2,3,4,5,6,7];
>> average(z)
ans =
4
handle =
@average
ave =
@average
>> ave(z)
ans =
4
二、匿名函数
匿名函数是函数句柄的一种特殊用法,这里所得到的函数句柄变量不指向特定的函数(即不指向函数M文件中的函数名),而是指向一个函数表达式(具体表达式)。
语法如下:
变量名=@(输入参数列表)运算表达式;
例子:
为了说明问题,我们用简单的两个数相加,
sum =
@(x,y)x+y
>> sum(2,3)
ans =
5
三、内联函数
内联函数和普通的函数句柄,准确说跟匿名函数比较类似,可以通过一个函数表达式近而得到该函数。
语法格式如下:
1 变量名=inline(表达式);
2 变量名=inline('函数表达式', '变量名1','变量名2', ... ,'变量名n');(推荐)
例如:
1
>> a='x+y'
a =
x+y
>> f=inline(a)
f =
Inline function:
f(x,y) = x+y
>> f(2,3)
ans =
5
2
>> f=inline('x+y','x','y')
f =
Inline function:
f(x,y) = x+y
>> f(2,3)
ans =
5