主要内容

嵌套函数

什么是嵌套函数?

嵌套函数是完全包含在父函数中的函数。程序文件中的任何函数都可以包含一个嵌套函数。

例如,这个函数命名为包含名为nestedfx

函数父disp (这是父函数) nestedfx函数nestedfx disp (这是嵌套函数结束结束

嵌套函数与其他类型函数的主要区别在于它们可以访问和修改父函数中定义的变量。结果是:

  • 嵌套函数可以使用未显式作为输入参数传递的变量。

  • 在父函数中,可以为嵌套函数创建句柄,其中包含运行该嵌套函数所需的数据。

嵌套函数的要求

  • 通常,函数不需要结束声明。然而,要在程序文件中嵌套任何函数,所有该文件中的函数必须使用结束声明。

  • 不能在任何MATLAB中定义嵌套函数®程序控制语句,如如果/ elseif /switch / case,或try / catch

  • 必须直接通过名称调用嵌套函数(不使用函数宏指令类创建的函数句柄),或使用@运算符(和不str2func).

  • 嵌套函数或包含它们的函数中的所有变量必须显式定义。也就是说,您不能调用给变量赋值的函数或脚本,除非这些变量已经存在于函数工作区中。(有关更多信息,请参见解决错误:试图将变量添加到静态工作区。.)

在父函数和嵌套函数之间共享变量

一般来说,一个函数工作区中的变量对其他函数是不可用的。但是,嵌套函数可以访问和修改包含它们的函数的工作区中的变量。

这意味着嵌套函数和包含嵌套函数的函数都可以修改同一个变量,而无需将该变量作为参数传递。例如,在每个函数中,小说而且main2,主函数和嵌套函数都可以访问变量x

函数Main1 x = 5;nestfun1函数Nestfun1 x = x + 1;结束结束
函数main2 nestfun2函数Nestfun2 x = 5;结束X = X + 1;结束

当父函数不使用给定变量时,该变量仍然是嵌套函数的局部变量。例如,在此函数中命名主要,这两个嵌套函数都有自己的版本x不能相互作用的:

函数Main nestedfun1 nestedfun2函数Nestedfun1 x = 1;结束函数Nestedfun2 x = 2;结束结束

返回输出参数的函数在其工作空间中有用于输出的变量。但是,父函数只有在显式地请求嵌套函数的输出时才有变量。例如,这个函数parentfun有变量y在其工作空间中:

函数Parentfun x = 5;nestfun;函数Y = nestfun Y = x + 1;结束结束

如果按如下方式修改代码,则变量z是否在工作空间parentfun

函数Parentfun x = 5;Z = nestfun;函数Y = nestfun Y = x + 1;结束结束

使用句柄存储函数参数

嵌套函数可以使用三个来源的变量:

  • 输入参数

  • 嵌套函数中定义的变量

  • 父函数中定义的变量,也称为外部作用域变量

为嵌套函数创建函数句柄时,该句柄不仅存储函数的名称,还存储外部作用域变量的值。

例如,在一个名为makeParabola.m.这个函数接受几个多项式系数,并返回一个句柄给计算该多项式值的嵌套函数。

函数p = make抛物线(a,b,c) p = @抛物线;函数Y =抛物线(x) Y = a*x。^2 + b*x + c;结束结束

makeParabola函数的句柄抛物线包含系数值的函数一个b,c

在命令行中,调用makeParabola函数的系数值为1.3.2,30..使用返回的函数句柄p求某一点上的多项式值:

p = make抛物线(1.3,0.2,30);X = 25;Y = p(X)
Y = 847.5000

许多MATLAB函数接受函数处理输入,在一定范围内对函数求值。例如,画出抛物线方程-25年+ 25

fplot (p, -25, 25)

属性的多个句柄抛物线每个函数使用不同的多项式系数:

firstp = make抛物线(0.8,1.6,32);secondp = make抛物线(3,4,50);Range = [-25,25];图保存fplot (firstp、范围)fplot (secondp、范围、“:”)举行

嵌套函数的可见性

每个函数都有一个范围也就是说,它是可见的一组其他函数。可以使用嵌套函数:

  • 从它的上一层开始。(在下面的代码中,函数一个可以调用BD,但不是CE.)

  • 从同一父函数内嵌套在同一级别的函数。(函数B可以调用D,D可以调用B.)

  • 从任何较低级别的函数。(函数C可以调用BD,但不是E.)

    函数一个(x, y)主要功能B (x, y) D (y)函数B (x, y)%嵌套在A中C (x) D (y)函数C (x)%嵌套在B中D (x)结束结束函数D (x)%嵌套在A中E (x)函数E (x)%嵌套在D中disp (x)结束结束结束

扩展嵌套函数作用域的最简单方法是创建函数句柄并将其作为输出参数返回,如使用句柄存储函数参数.只有可以调用嵌套函数的函数才能创建该函数的句柄。

相关的话题