函数类型
文件中的局部和嵌套函数
程序文件可以包含多个函数。局部和嵌套函数可用于将程序分为更小的任务,使读取和维护代码变得更容易。
局部函数是在同一文件中可用的子例程。局部函数是拆分编程任务的最常见方法。在仅包含函数定义的函数文件中,局部函数可以任意顺序出现在文件中主函数的后面。在包含命令和函数定义的脚本文件中,局部函数必须位于文件末尾。(R2016b 或更高版本支持脚本中的函数。)
例如,创建一个名为 myfunction.m
的函数文件,其中包含主函数 myfunction
以及两个局部函数 squareMe
和 doubleMe
:
function b = myfunction(a) b = squareMe(a)+doubleMe(a); end function y = squareMe(x) y = x.^2; end function y = doubleMe(x) y = x.*2; end
可以从命令行或另一程序文件中调用主函数,但局部函数仅适用于 myfunction
:
myfunction(pi)
ans = 16.1528
嵌套函数完全包含在另一函数内。嵌套函数与局部函数的主要区别是,嵌套函数可以使用在父函数内定义的变量,无需将这些变量作为参数显式传递。
子例程共享数据(例如在组件间传递数据的应用程序)时,嵌套函数很有用。例如,创建一个函数,该函数允许您使用滑块或可编辑的文本框设置介于 0 与 1 之间的一个值。如果您将嵌套函数用于回调,滑块和文本框可以共享值和彼此的句柄,无需显式传递它们:
function myslider value = 0; f = figure; s = uicontrol(f,'Style','slider','Callback',@slider); e = uicontrol(f,'Style','edit','Callback',@edittext,... 'Position',[100,20,100,20]); function slider(obj,~) value = obj.Value; e.String = num2str(value); end function edittext(obj,~) value = str2double(obj.String); s.Value = value; end end
子文件夹中的私有函数
与局部或嵌套函数一样,私有函数仅供特定位置的函数访问。但是,私有函数与可以调用它们的函数不在同一个文件中。它们位于名称为 private
的子文件夹中。仅 private
文件夹紧邻的上一级文件夹内的函数可使用私有函数。使用私有函数将代码分割为不同的文件,或在多个相关函数间共享代码。
无需文件的匿名函数
只要函数包含一个语句,匿名函数即允许您定义该函数而不必创建程序文件。匿名函数通常用于定义数学表达式,然后使用 MATLAB® 复合函数(即接受函数句柄用作输入的函数)基于某个值范围计算该表达式。
例如,以下语句为匿名函数创建名称为 s
的函数句柄:
s = @(x) sin(1./x);
该函数具有一个输入 x
。@
运算符创建函数句柄。
您可以使用该函数句柄针对特定值计算函数,例如
y = s(pi)
y = 0.3130
您也可以将该函数句柄传递给在某一值范围内计算的函数,例如 fplot
:
range = [0.01,0.1]; fplot(s,range)