嵌套函数的定义
嵌套函数,即nested function,就是嵌套在函数体内部的函数。嵌套函数可以出现在一个函数体内部的任何位置,开始以function声明,结束的时候加上end。需要说明的是包含有嵌套函数的函数,无论它是主函数、子函数、嵌套函数,都应该在末尾的地方加上end。下面的代码是一个简单的嵌套函数的例子
例1
function r=MyTestNestedFun(input)
a=5;
c=sin(input)+tan(input);
function y=nestedfun(b)
y=a*c+b;
end
r=nestedfun(5);
end
>> r=MyTestNestedFun(6)
r =
2.1479
结果是这样得到的:调用MyTestNestedFun后,程序依次执行a=5;c=sin(input)+tan(input);然后又调用nestedfun这个嵌套函数,此时b=5,而嵌套函数所在的函数中的a,c对嵌套函数是可见的。r=a*c+b=5*(-0.5704)+5=2.1479
嵌套函数种类
嵌套函数可以分为单重嵌套函数和多重嵌套函数。先说单重嵌套函数,这样的函数嵌套在别的函数体内,自己内部不再有嵌套的函数。如上例示例。一个函数里可以有一个或者多个单重嵌套函数。
多重嵌套函数,这样的函数嵌套在别的函数体内,同时自己内部又嵌套着别的另一层或几层函数。同样一个函数里可以有一个或者多个多重嵌套函数。如下
例2
function x=A(p1,p2)
...
function y1=B1(p3)
...
function z1=C1(p4)
...
end
...
end
...
function y2=B2(p5)
...
function z2=C2(p6)_
...
function w=D(p7)
...
end
end
end
end
该函数A(p1,p2)内部有两个嵌套函数,分别B1(p3)和B2(p5),而B1(p3)和B2(p5)分别是二重和三重嵌套函数。
嵌套函数的变量作用域
例1
function r=NestedFunctionVarScopeDemo(a)
b=a+1;
function Nested1
c=b+1;
function Nested11
d=c+a;
end
Nested11;
end
Nested1
r=d;
end
运行上面的代码,譬如
r=NestedFunctionVarScopeDemo(1)
r =
4
上述代码有一个二重嵌套函数Nested1,它内部还包含一个嵌套函数Nested11,整个函数的执行过程如下:
传入变量a=1,计算b的值,b=2;遇到Nested1的函数定义,往下是调用Nested1的语句,进入Nested1之后先计算c的值&