Main Content

localfunctions

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

说明

示例

fcns = localfunctions 返回当前文件中所有局部函数的函数句柄元胞数组 fcns

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

示例

全部折叠

在您的工作文件夹下的 computeEllipseVals.m 文件中创建以下函数。此函数将返回一个包含所有局部函数句柄的元胞数组。

function fh = computeEllipseVals
fh = 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

在命令提示符下,调用该函数以获取包含局部函数句柄的元胞数组。

fh = computeEllipseVals
fh =

  3x1 cell array

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

使用某局部函数的句柄调用该局部函数来计算椭圆面积。computeArea 函数句柄是元胞数组中的第三个元素。

fh{3}(3,1)
ans =

    9.4248

从 R2016b 开始,您可以在脚本中包含局部函数。因此,您可以使用 localfunctions 函数来创建可在脚本或命令提示符下调用的函数句柄。

在您的工作文件夹下的 mystats.m 文件中创建以下脚本。此脚本创建一个元胞数组,其中包含所有局部函数的句柄。

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

avg = mymean(x)

fh = localfunctions;
med = fh{2}(x) % equivalent to med = mymedian(x,n)

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® 通过直接调用 mymean 局部函数来计算均值,并通过使用函数句柄调用 mymedian 局部函数来计算中位数。

mystats
avg =

    4.4167


med =

    4.5000

在命令提示符下,使用函数句柄调用 mymean 局部函数。此脚本中的变量可在命令提示符下访问。mymean 函数句柄是元胞数组中的第一个元素。

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

  2x1 cell array

    {  @mymean}
    {@mymedian}


avg2 =

    15

版本历史记录

在 R2013b 中推出