MATLAB嵌套函数的变量:使用范围、例子例题

2020年12月16日14:18:16MATLAB嵌套函数的变量:使用范围、例子例题已关闭评论

MATLAB嵌套函数变量:使用范围、例子例题

通常在函数之间,局部变量是不能共享的。子函数不能与主函数或其他子函数共享变量,因此,每个函数都有自己的工作空间(workspace),用于存放自己的变量。嵌套函数也都有自己的工作空间。但是因为它们是嵌套关系,所以有些情况下可以共享变量。

【 例题1 】 嵌套函数示例1。

    varScope1.m
    function varScope1
    x = 5;
    nestfun1
          function nestfun1
              nestfun2
              function nestfun2
                  x = x+1
              end
          end
    end
    varScope2.m
    function varScope2
    nestfun1
          function nestfun1
              nestfun2
              function nestfun2
                  x=5;
              end
          end
    x=x+1
    end

运行结果如下。

    >> varScope1
    x =
         6
    >> varScope2
    x =
         6

本例中的两个M文件都使用了多层嵌套函数。在这两个例子中,变量x被储存在外层主函数的工作空间,所以它可被嵌套在里面的函数读取或写入。

【 例题2 】 嵌套函数示例2。

    varScope3.m
    function varScope3
    nestfun1
    nestfun2
            function nestfun1
                x=5;
            end
            function nestfun2
                x=x+1
            end
    end

本例中的两个嵌套函数 nestfun1和nestfun2是并列关系,外层的函数varScope3没有读取x,因为x不在其工作空间中,所以,x并不能被两个嵌套函数共享。nestfun1定义了x在nestfun1的工作空间中,不能被nestfun2共享。因此,当nestfun2运行之后试图访问x时,就会出错。运行本例中的程序,将会显示如下错误信息。

    >> varScope3
    ??? Undefined function or variable "x".
    Error in ==> varScope3>nestfun2 at 8
            x=x+1
    Error in ==> varScope3 at 3
    nestfun2

【 例题3 】 嵌套函数输出变量的共享示例。

    varScope4.m
    function varScope4
    x=5;
    nestfun;
            function y = nestfun
                y=x+1;
            end
    y
    end
    varScope5.m
    function varScope5
    x=5;
    z=nestfun;
            function y = nestfun
                y=x+1;
            end
    z
    end

由嵌套函数返回的结果变量并不被外层的函数共享。在varSeope4.m和varScope5.m中,varScopc4.m在运行到倒数第2行时会发生错误。这是因为虽然在嵌套函数中计算并返回了y的值,但是这个变量y只存在于嵌套函数的工作空间,并不能被外层函数共享。而在varScape5.m中将嵌套函数赋值给了变量z,所以最终可以正确地显示z的值,具体的运行结果如下。

    >> varScope4
    ??? Undefined function or variable 'y'.
    Error in ==> varScope4 at 7
    y
    >> varScope5
    z =
         6
  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。