嵌套函数是指在某函数中定义的函数。

嵌套函数的创建

MATLAB允许在M文件的函数体中定义-一个或多个嵌套函数,被嵌套的函数能包含进 任何构成M文件的成分。

MATLAB函数文件一般不需要使用end语句来结束函数。对于嵌套函数,无论是嵌套的 还是被嵌套的,都必须以end语句结束。在一个M文件内,只要定义了嵌套函数,其他非嵌套函数也需要end语句来结束。 嵌套函数有以下3种格式。

1)最基本的嵌套函数结构

function x=A(pl ,p2)
...
       function y=B(p3)
 ...
       end
 ...
 end


2)平行嵌套函数结构

function x=A(p1 ,p2)
..
       function y=B(p3)      ...
       end
       function z=C( p4)      ...
      end
 ...
 end

其中,函数A嵌套函数B和函数C,但函数B和函数C是并列关系。
3)多层嵌套函数结构。

function x= A(p1,p2)
...
       function y=B(p3)
       ...
           function z=C( p4)          ...
          end      ...
      end...
 end


其中,函数A嵌套了函数B,而函数B嵌套了函数C。

嵌套函数的调用

一个嵌套函数可以被以下3种函数进行调用。
1)该嵌套函数的直接上一层函数。
2)在同一母函数下的同一级嵌套函数。
3)任意低级别的函数。

例:

>>function A(x,y)                %主函数
     B(x,y);
     C(y);
            function B(x,y)         %嵌套在A内
            D(x);
            C(y);
                      function D(x)       %嵌套在B内
                            C(x);
                      end 
           end
           function C(x)              %嵌套在A内
             E(x);
                    function E(x)           %嵌套在C内                        ...
                    end
           end
 end

函数A包含嵌套函数B和嵌套函数C,函数B和函数C分别嵌套了函数D和函数E。
其调用关系如下。
1)主函数为函数A,可调用函数B和函数C,但不能调用函数D和函数E。
2)函数B和函数C为同一级嵌套函数,函数B可以调用函数C和函数D,但无法调用
函数E,函数C可以调用函数B和函数E,但无法调用函数D。

3)函数D和函数E均可调用函数B和函数C,但函数D和函数E分属于两个函数的嵌
套函数;函数D和函数E虽属于同一级别的函数,但它们的母函数不同,所以无法相互
调用。

嵌套函数中变量的使用范围

函数之间,局部变量是不能共享的。即子函数之间或与主函数之间是不能共享变量的, 每个函数都有自己的工作空间,用于存放其变量。在嵌套函数中,因为函数之间存在嵌套的 关系,所以有些情况下可以共享变量。

共享示例,创建文件test5. m和test6. m。

test5. m代码如下。

>>function test5
    x=5;
    nestfun;
              function y = nestfun
                             y=x+1;
            end
            y
     end .

test6. m代码如下。

>>function test6
      x=5;
      z = nestfun;
                  function y = nestfun
                           y=x+1;
                  end
     end

在“Command Window"窗口运行如下代码并得到的结果如下。

>>test5
     Undefined function or variable 'y '.
     Error in test5 (line 7)
 >>
 >>test6
      z=
           6

在test5. m文件中运行到第7行时发生错误,这是由于在嵌套函数中尽管计算了y的值并进行了返回,但是这个变量只存储在嵌套丽数的工作空间中,无法被外层的函数所共享。在test6.m文件中将嵌套函数的赋值给了z,最终实现了正确显示。