嵌套函数
什么是嵌套函数?
嵌套函数是完全包含在父函数中的函数。程序文件中的任何函数都可以包含一个嵌套函数。
例如,这个函数名为父
包含一个名为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 = 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 = 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、范围、“:”)举行从
嵌套函数的可见性
每个函数都有一定的范围也就是说,它是可见的一组其他函数。可以使用嵌套函数:
从它的上一层。(在下面的代码中,函数
一个
可以调用B
或D
,但不C
或E
.)从嵌套在同一父函数内的同一层的函数。(函数
B
可以调用D
,D
可以调用B
.)从任何较低级别的函数。(函数
C
可以调用B
或D
,但不E
.)函数一个(x, y)%的主要功能B (x, y) D (y)函数B (x, y)%嵌套在AC (x) D (y)函数C (x)%嵌套在B中D (x)结束结束函数D (x)%嵌套在AE (x)函数E (x)%嵌套在D中disp (x)结束结束结束
扩展嵌套函数范围的最简单方法是创建函数句柄并将其作为输出参数返回,如使用句柄存储函数参数.只有可以调用嵌套函数的函数才能创建该函数的句柄。