主要内容

localfunctions

当前文件中所有局部函数的句柄

说明

fcns = localfunctions 返回当前 MATLAB® 文件中所有局部函数的句柄元胞数组。在元胞数组中,localfunctions 以未定义的顺序返回函数句柄。

您不能在命令行或匿名函数的上下文中定义局部函数,因此,当您从这些上下文中调用 localfunctions 时,会得到一个空元胞数组。

示例

示例

全部折叠

在当前文件夹中名为 computeEllipseVals.m 的文件中,创建一个主函数,该函数返回该文件中所有局部函数句柄的元胞数组。每个局部函数都计算一个椭圆的特定度量。

function fcns = computeEllipseVals
fcns = localfunctions;
end

function f = computeFocus(a,b)
f = sqrt(a^2-b^2);
end

function e = computeEccentricity(a,b)
f = computeFocus(a,b);
e = f/a;
end

function ae = computeArea(a,b)
ae = pi*a*b;
end

调用 computeEllipseVals 函数以获取包含局部函数句柄的元胞数组。

fcns = computeEllipseVals
fcns =

  3×1 cell array

    {       @computeFocus}
    {@computeEccentricity}
    {        @computeArea}

使用某局部函数的句柄调用该局部函数来计算具有测量值 a = 5b = 1 的椭圆面积。computeArea 函数由元胞数组的第三个元素表示。

fcns{3}(5,1)
ans =

   15.7080

在当前文件夹内一个名为 mystats.m 的文件中创建 mystats 脚本。该脚本使用文件中局部函数句柄元胞数组来显示向量的均值和中位数。

x = [1 3 5 7 9 10 8 6 4 2 0 -2];

fcns = localfunctions;

for i = 1:length(fcns)
    disp(extractAfter(func2str(fcns{i}),2) + ": " + num2str(fcns{i}(x)))
end

function a = mymean(v)
n = length(v);
a = sum(v)/n;
end

function m = mymedian(v)
n = length(v);
w = sort(v);
if rem(n,2) == 1
    m = w((n + 1)/2);
else
    m = (w(n/2) + w(n/2 + 1))/2;
end
end

运行脚本。MATLAB 显示通过调用函数句柄计算出的值。

mystats
mean: 4.4167
median: 4.5

访问由脚本创建的函数句柄的元胞数组。

fcns
fcns =

  2×1 cell array

    {  @mymean}
    {@mymedian}

基于显示的值,元胞数组的第二个元素指向 mymedian 局部函数的句柄。使用此函数句柄返回一个任意向量的中位数。

x2 = [1 1 2 6 24 120 720 5040];
median2 = fcns{2}(x2)
median2 =

    15

输出参量

全部折叠

当前文件中所有局部函数的句柄,以函数句柄元胞数组形式返回。

版本历史记录

在 R2013b 中推出

另请参阅

函数