创建函数处理

可以为命名和匿名函数创建函数句柄。您可以将多个函数句柄存储在一个数组中,并保存和加载它们,就像您可以保存和加载任何其他变量一样。

什么是函数句柄?

函数句柄是MATLAB®将关联存储到函数的数据类型。间接地调用一个函数使您能够调用该函数,无论您从哪里调用它。函数句柄的典型用法包括:

  • 将一个函数传递给另一个函数(通常被调用)函数的功能)。例如,将函数传递给集成和优化函数,如积分fzero

  • 指定回调函数(例如,响应UI事件或与数据获取硬件交互的回调)。

  • 将句柄构造为内联定义的函数,而不是存储在程序文件中(匿名函数)。

  • 从主函数外部调用局部函数。

你可以看到如果一个变量,h,是一个函数句柄使用isa(h, function_handle)

创建函数处理

若要为函数创建句柄,请在函数名之前加上@的迹象。例如,如果有一个函数被调用myfunction,创建一个名为的句柄f如下:

f = @myfunction;

使用句柄调用函数的方法与直接调用函数的方法相同。例如,假设您有一个名为的函数computeSquare,定义为:

函数y = computeSquare(x) y = x.^2;结束

创建一个句柄并调用该函数来计算4的平方。

f = @computeSquare;= 4;b = f ()
b = 16

如果该函数不需要任何输入,则可以使用空括号调用该函数,例如

h = @ones;一个= h ()
一个= 1

如果没有括号,赋值将创建另一个函数句柄。

一个= h
一个= @ones

函数句柄是可以传递给其他函数的变量。例如,计算的积分x2取值范围[0,1]。

q =积分(f (0, 1);

函数句柄存储它们的绝对路径,因此当您有一个有效的句柄时,您可以从任何位置调用函数。在创建句柄时,不必指定函数的路径,只需指定函数名。

在创建函数句柄时,请记住以下几点:

  • 名称长度——函数名的每个部分(包括包名和类名)必须小于namelengthmax。否则,MATLAB将截断名称的后一部分。

  • 作用域——创建句柄时函数必须在作用域内。因此,函数必须位于MATLAB路径上或当前文件夹中。或者,对于本地或嵌套函数的句柄,该函数必须位于当前文件中。

  • 优先级——当有多个同名函数时,MATLAB使用与调用函数相同的优先级规则来定义函数句柄。有关更多信息,请参见功能优先级顺序

  • 重载——如果你指定的函数重载了一个类中的一个函数,而这个类不是一个基本的MATLAB类,那么这个函数在构造的时候并没有与函数句柄相关联。相反,MATLAB考虑输入参数并确定在计算时调用哪个实现。

匿名函数

您可以创建匿名函数的句柄。匿名函数是一个基于表达式的单行MATLAB函数,它不需要程序文件。通过定义匿名函数的主体来构造一个句柄,anonymous_function,以及以逗号分隔的匿名函数的输入参数列表,arglist。的语法是:

h = @ (arglist)anonymous_function

例如,创建一个句柄,sqr,指向一个计算数字平方的匿名函数,并使用其句柄调用该匿名函数。

sqr = @(n) n.^2;x = sqr (3)
x = 9

有关更多信息,请参见匿名函数

函数句柄数组

您可以通过将函数句柄收集到单元格或结构数组中来创建函数句柄数组。例如,使用单元格数组:

C = {@sin, @cos, @tan};C{2}(π)
ans = 1

或使用结构数组:

年代。一个= @sin;年代。b = @cos;南卡罗来纳州= @tan;s.a.(π/ 2)
ans = 1

保存和加载功能句柄

您可以在MATLAB中保存和加载函数句柄,就像您可以保存和加载任何其他变量一样。换句话说,使用保存负载功能。如果保存函数句柄,MATLAB不保存路径信息。如果加载了函数句柄,而该函数文件在路径上不再存在,则该句柄无效。如果自创建句柄以来文件位置或文件名发生了更改,则会发生无效句柄。如果句柄无效,MATLAB可能会在加载文件时显示警告。当您调用无效句柄时,MATLAB会发出一个错误。

另请参阅

||||

相关的例子

更多关于