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