今天杰哥给大家介绍一下函数句柄的详细知识。
首先我们先看一个问题:表示什么意思呢?其中的@代表什么呢?
我们来揭晓一下答案:
f是函数句柄;@是定义句柄的运算符;相当于建立了一个函数文件:
% 建立函数文件f.m
function y=f(x)
y=cos(x);
再给大家举个例子:
则相当于建立了一个函数文件:
%建立xsqual函数
function y=xsqual(x)
y=x^2+2*x+1;
我们再做一个详细说明:
1、函数句柄function_handle(@):是一种间接调用函数的方式。
2、语法:handle=@functionname or handle=@(arglist)anonymous_function
3、描述:函数句柄(function handle)是一种能够提供函数间接调用的matlab value。我们可以通过传递句柄来调用各种其他功能。你也可以将句柄存储到数据结构中备用(例如Handle Graphic 回调)。句柄是matlab的标准数据类型之一。
当创建句柄时,你所指定的函数必须在matlab搜索路径之中,并且必须在创建语句的scope之中。例如,只要在定义子函数的文件之中,我们就可以为这个子函数创建句柄。这些条件不适用于evaluate函数句柄。例如,你可以在一个单独(out-scope)通过句柄执行一个子函数,这要求句柄是在in-scope创建的。
举例说明:
handle=@(arglist)anonymous_function用来创建匿名函数(anonymous function)并返回该匿名函数的句柄。其中:括号右边的函数体是单个的matlab语句(statement)或者matlab命令;arglist是一个用逗号“,”分隔的输入变量列表;该函数通过句柄handle执行。
备注:函数句柄是标准的matlab数据类型。因此,你可以像matlab其他数据类型一样进行操作。
4、函数句柄的好处
①提高运行速度。因为matlab对函数的调用每次都是要搜索所有的路径,从set path中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对运行速度会有所提高。
②使用可以与变量一样方便。比如说,我在这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝过来。因为你创建的function handles中,已经包含了路径。