Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

函数类型

文件中的局部和嵌套函数

程序文件可以包含多个函数。局部和嵌套函数可用于将程序分为更小的任务,使读取和维护代码变得更容易。

局部函数是在同一文件中可用的子例程。局部函数是拆分编程任务的最常见方法。在仅包含函数定义的函数文件中,局部函数可以任意顺序出现在文件中主函数的后面。在包含命令和函数定义的脚本文件中,局部函数必须位于文件末尾。(R2016b 或更高版本支持脚本中的函数。)

例如,创建一个名为 myfunction.m 的函数文件,其中包含主函数 myfunction 以及两个局部函数 squareMedoubleMe

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)

Figure contains an axes object. The axes object contains an object of type functionline.

相关主题

外部网站