匿名函数返回更新的数组长度 - matlab

时间:2017-09-10 21:41:04

标签: matlab function anonymous-function

我正在尝试编写一个简单的匿名函数,它返回一个数组的长度

>> a=[1 2 3];

>> f = @() length(a);

>> f()
    3

>> a = [1 2 3 4];

>> f()
    3

是否可以编写一个函数,每次调用它时都会返回更新数组的长度?

2 个答案:

答案 0 :(得分:3)

一种实现你想要的丑陋方法

global a;
a = [1 2 3];
f = @() eval('global a; length(a)')
f()
a = [1 2 3 4];
f()

我强迫说我强烈建议不要使用这种类型的代码,因为它依赖于全局变量和对eval的调用,在可能的情况下都应该避免这两种情况。

更好的方法是将a作为参数传递给函数

a = [1 2 3];
f = @(x) length(x)
f(a)
a = [1 2 3 4];
f(a)

或者,因为在这种情况下,调用f与调用length相同,那么根本就没有理由使用匿名函数。

a = [1 2 3];
length(a)
a = [1 2 3 4];
length(a)

答案 1 :(得分:3)

根据变量定义匿名函数会使该变量在函数内保持静态。即。

% this...
a = [1 2 3];
f = @() length(a);
% ...  is equivalent to this...
f = @() length([1 2 3]);

您想要创建一个可以带参数的匿名函数

f = @(x) length(x);
a = [1 2 3]; 
f(a); % >> ans = 3
a = [1 2 3 4]; 
f(a); % >> ans = 4

虽然此时只使用length(a)并且没有定义一些指针函数!