嵌套功能是父功能中完全包含的函数。程序文件中的任何函数都可以包含嵌套函数。
例如,此功能命名父母
包含命名的嵌套函数巢nest
:
函数父项('这是父职能')NestedFX.函数巢式富克斯("这是嵌套函数")结尾结尾
嵌套函数与其他类型的函数之间的主要区别在于它们可以访问和修改在其父函数中定义的变量。因此:
嵌套功能可以使用未明确传递为输入参数的变量。
在父函数中,可以创建嵌套函数的句柄,其中包含运行嵌套函数所需的数据。
通常,函数不需要结尾
陈述。但是,要在程序文件中嵌套任何功能,所有该文件中的函数必须使用结尾
陈述。
您无法在任何Matlab中定义嵌套函数®程序控制陈述,例如如果/ elseif /
那开关/案例
那为了
那而
, 或者试着抓
.
您必须直接调用嵌套函数的名称(不使用函数宏指令
)或使用您使用的函数句柄使用@
操作符(而不是str2func
)。
必须明确定义嵌套函数中的所有变量或包含它们的函数。也就是说,除非函数工作空间中已存在这些变量,否则无法调用将值分配值的函数或脚本。(有关更多信息,请参阅解析错误:尝试将变量添加到静态工作区。.)
通常,一个函数工作空间中的变量不可用其他函数。但是,嵌套函数可以访问和修改包含它们的函数的工作区中的变量。
这意味着嵌套函数和包含它的函数都可以修改相同的变量,而无需将该变量作为参数传递。例如,在这些函数中,小说
和main2
,主函数和嵌套函数都可以访问变量X
:
函数x = 0;nestfun1函数Nestfun1 x = x + 1;结尾结尾 |
函数Main2 Nestfun2.函数stfun2 x = 5;结尾X = X + 1;结尾 |
当父函数不使用给定的变量时,该变量仍然是嵌套函数的局部变量。例如,在此函数中命名主要
,这两个嵌套函数有自己的版本X
无法互相互动:
函数Main Nestedfun1 Nestedfun2.函数Nestedfun1 x = 1;结尾函数巢纱2 x = 2;结尾结尾
返回输出参数的函数具有工作区中输出的变量。但是,如果显式请求它们,则父函数仅具有嵌套函数的输出的变量。例如,此功能parentfun
做不是有变量y
在它的工作空间:
函数parentfun x = 5;巢义;函数y = nestfun y = x + 1;结尾结尾
如果将代码修改如下,则变量Z.
是在工作区parentfun
:
函数parentfun x = 5;z = nestfun;函数y = nestfun y = x + 1;结尾结尾
嵌套功能可以使用三个来源的变量:
输入参数
嵌套功能中定义的变量
在父函数中定义的变量也调用外部作用域变量
当您为嵌套函数创建函数句柄时,该句柄不仅存储函数名,还存储外部作用域变量的值。
例如,在命名的文件中创建一个函数makeparabola.m.
.该函数接受多个多项式系数,并将句柄返回到嵌套函数,该函数计算该多项式的值。
函数p = makeParabola(a,b,c);函数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);第二种= 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)%嵌套在A中C(x)d(y)函数C (x)%嵌套在B中d(x)结尾结尾函数d(x)%嵌套在A中前任)函数前任)%嵌套于DDISP(x)结尾结尾结尾
扩展嵌套功能范围的最简单方法是创建函数句柄并将其作为输出参数返回,如图所示使用手柄存储功能参数.只有能够调用嵌套函数的函数才能创建它的句柄。