先来复习一下上一章中M文件的内容。
M文件分类:
区别
命令文件没有输入,没有返回;
命令文件可以对工作空间的变量操作,结果返回工作空间,而函数文件中的变量为局部变量,函数执行完毕,变量被清除;
命令文件可以直接运行,函数文件见需要调用的形式运行(除了特殊的函数文件之外)。
下面来介绍一下函数文件。
函数文件的基本格式如下:
function [输出形参]=函数名([输入形参])
[注释说明]
函数体
关于函数文件名
通常和函数名一致,如果不一致,那么忽略函数名,调用时使用函数文件名。
注释部分
注释部分可以提供help以及lookfor命令的查找功能
下面来看一段示例代码:
function re = add_my(a, b) %ADD_MY 完成变量a和b的相加 % 输入: a加数1 % b加数2 % 输出: re为输入两个参数的加和 % % $Author:why % $Date: 2013-03-12 % Version: V1.0 re = a + b;
>> help add_my add_my 完成变量a和b的相加 输入: a加数1 b加数2 输出: re为输入两个参数的加和 $Author:why $Date: 2013-03-12 Version: V1.0
直接调用函数即可。注意,调用时输入的是文件名而不是函数文件,二者不一致时输入文件名调用对应的函数:
>> add_my(1,2) ans = 3
函数参数可调标识变量
可以完成传递参数的可调功能,类似于高级语言中的函数重载和多态。
前两者为输入输出参数个数,后面两个可以代表未知的输入输出变量。
举一个类似于函数重载的用例说明nargin的使用:
function re = add_multi(a, b, c, d) % 函数参数可调标识变量 % % nargin:输入参数的个数 if nargin == 4 re = a + b + c + d; elseif nargin == 3 re = a + b + c; elseif nargin == 2 re = a + b; else error('输入参数个数错误'); end
function [a, b] = add_mu(c, d, e, f) % % % if nargout == 2 a = c + d + e + f; b = c * d * e * f; else a = c + d + e + f; end
在使用的时候注意,表明两个输出的时候是乘积,一个输出是加和:
>> [a,b]=add_mu(1,2,3,4) a = 10 b = 24
如果输入的形参过多,不会出现too many input arguments的提示了,
也就是说如果有很多变量可以用这个来调整:
function re = add_var(a, b, varargin) % % % error(nargchk(2, 4, nargin));%最小2最大4检测内容nargin if nargin == 2 re = a + b; elseif nargin == 3 c = varargin{1}; re = a + b + c; elseif nargin == 4 c = varargin{1}; d = varargin{2}; re = a + b + c + d; else error('wrong'); end
>> add_var(1) Error using add_var (line 6) Not enough input arguments. >> add_var(1,2) ans = 3 >> add_var(1,2,3) ans = 6 >> add_var(1,2,3,4) ans = 10 >> add_var(1,2,3,4,5) Error using add_var (line 6) Too many input arguments.
使用global声明,可以提供不同的M文件访问同一个变量。
不同的函数之间访问同一个变量,可以通过返回参数来设置,或者使用全局变量。
在GUI中,也可以通过其他方式完成(GUI数据,app数据等)。