主要内容

嵌套函数

什么是嵌套函数?

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

例如,这个函数名为包含一个嵌套函数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它们不能相互作用:

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

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

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

如果你像下面这样修改代码,变量z在工作区中parentfun

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

使用句柄存储函数参数

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

  • 输入参数

  • 在嵌套函数中定义的变量

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

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

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

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

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

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

p = makeParabola(1.3。2、30);X = 25;Y = p (X)
Y = 847.5000

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

fplot (p, -25, 25)

控件可以创建多个句柄抛物线每个函数使用不同的多项式系数:

firstp = makeParabola (0.8, 1.6, 32);secondp = makeParabola(3、4、50);范围=(-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)结束结束结束

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

相关的话题