昨天的那一篇讲的几个函数,不知道你们理解的如何,是否懂得怎么去使用了,如果还没懂,一定要再多看几遍,并且去在软件上进行实操,今天的话,将要介绍一下函数的嵌套,不过在正式讲嵌套之前,先对主函数和子函数做下了解。
主函数一般来说,函数M文件中的第一个函数就是主函数,之后任意数量的函数都是子函数,主函数也就是以其函数名命名的函数,因此可以被该文件外的其他文件中的函数或者脚本调用。
子函数一个函数M文件中,除主函数之外的都是子函数,子函数只能够被该文件中的其他函数调用,每个子函数都是以“function”开始,直至下一个函数的定义或者文件的结尾才结束,子函数的顺序可以随意,但是主函数一定是要最开始出现的。
接下来对主函数和子函数的格式编写一个程序,然后简单调用看下其运行结果:
程序:
function [avg,med] = newstats(u)%主函数%返回数组的均值和中间值n=length(u);avg=mean(u,n);med=median(u,n);function a=mean(v,n)%子函数%计算平均值a=sum(v)/n;function m=median(v,n)%子函数%计算中值w=sort(v);if rem(n,2)==1 m=w((n+1)/2);else m=(w(n/2)+w(n/2+1))/2;end
结果:
再说一下在M文件中调用函数的流程,调用时遇到函数,会先判断是否为子函数。然后判断是否为私有函数,最后才判断是不是当前目录下的其他函数M文件或者系统内置的函数。
私有函数刚好讲到私有函数,就顺便对它简单介绍下,私有函数就是MATLAB安装目录下,位于“private”这个目录下的函数M文件,构造和我们自己创建的函数一个样,不过私有文件只可以被private目录的上级目录下的函数M文件调用,而不能被脚本文件调用,也不能被其他目录下的任何M文件调用。
嵌套函数讲完主函数和子函数,现在开始嵌套函数的记录,这个理解起来就很简单了,最容易理解的就是多层嵌套结构,就相当于套纸杯,一个套一个的感觉,看下它的程序结构就知道了:
function x=A(p1,p2)...... function y=B(p3) ...... function z=C(pN) ...... end ....... end.......end
除了这种多层嵌套的结构,还有一种平级嵌套结构,就相当于一堆小球放一个纸箱子里,纸箱子就是级别最高的那个函数,然后其他小球都是同级别的函数,再来看看它的程序结构:
function x=A(p1,p2)...... function y=B(p3) ... end function y=C(p4) ... end function y=N(pN) ... endend
嵌套规则讲完了两种嵌套的结构,或许你们在想,这些函数嵌套后,函数之间的调用会有什么规则吗?
没错,有一定规则的,嵌套函数可以被该嵌套函数的上一层函数使用、也可以是同一个母函数的同级嵌套函数使用、甚至可以被任意一个低级别的函数调用,如果没太看懂意思,来看一个简单的示例,再理解上面讲的嵌套函数被调用的规则:
程序:
function A(x,y)B(x,y);D(x,y); function B(x,y) C(x); D(x); function C(x) B(x,y); D(x,y); end end function D(x,y) B(x,y); E(x); function E(x) B(x,y); D(x,y); end endend
该程序中可以很明显的看出,函数A能调用B和D,但是不能调用C和E;函数B可以调用C和D;函数D可以调用B和E,函数C可以调用B和D,函数E也可以调用B和D;看完这段程序后,再返回看调用规则就可以学会使用了。
夜未深,人未眠,继续刚夜未深,人未眠,就用上一篇讲到的函数参数配上今天讲的嵌套玩一玩吧,顺便加深下大家的印象。
因为嵌套函数和主函数是使用的相同的函数工作区,所以,varargin和varargout既可以表示为嵌套函数的输入输出变量,也可表示为主函数的输入输出变量。
那该怎么进行区分呢?
这就需要写好程序中的变量声明了,如果嵌套函数在函数声明里包含了varargin或varargout,则在函数内部调用这两个变量时,变量内容为该函数的输入输出变量;如果声明中没有包含,但是在其上层的函数声明有包含,就当在该嵌套函数内部调用这两个变量的时候,变量内容是上层函数的输入输出变量,不知道现在的你有没有被绕晕,来看程序再理一理吧。
程序:
function y=A(x,varargin)B(nargin,x*rand(4)) function B(argsIn,z) if argsIn>=2 C(z,varargin{1},4.512,1.729) end function C(varargin) if nargin>=2 y=varargin{1} end end endend
结果:
分析:
函数A调用nargin即“B(nargin,x*rand(4))”,表示函数A的输入变量个数,函数C调用的nargin代表的就是函数C的输入变量个数;
在函数A中,函数C嵌套在B中,函数B嵌套在A中,函数B中调用varargin{1}表示的是主函数A传入的第二个变量,因为A的第一个变量是x,之后才是varargin,而在函数C中的varargin{1}表示的就是函数B传给C的第一个变量,即z,也就是A传给B的”x*rand(4)”。
坚持看到这篇文章的你,现在是否已经对这几篇分享的内容有很好的理解了呢?
没有就继续品吧……
阅读本文共使用 秒
⬇️长按指纹关注电子狂人⬇️电子知识
一些电路设计与DIY作品
电子设计技巧与经验
FPGA
System Generator系列教程
算法介绍
通信协议分析
资料分享
Matlab系列记录
建设中~
点个赞
再走吧