返回数组更新长度的匿名函数 - matlab
anonymous function returning updated length of an array - matlab
我正在尝试编写一个简单的匿名函数,它 returns 数组的长度
>> a=[1 2 3];
>> f = @() length(a);
>> f()
3
>> a = [1 2 3 4];
>> f()
3
是否可以编写一个函数,每次调用时 returns 更新数组的长度?
一个丑陋的方法来完成你想要的
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)
根据变量定义匿名函数会使该变量在函数内成为静态变量。即
% 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)
并且不定义一些指针函数!
我正在尝试编写一个简单的匿名函数,它 returns 数组的长度
>> a=[1 2 3];
>> f = @() length(a);
>> f()
3
>> a = [1 2 3 4];
>> f()
3
是否可以编写一个函数,每次调用时 returns 更新数组的长度?
一个丑陋的方法来完成你想要的
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)
根据变量定义匿名函数会使该变量在函数内成为静态变量。即
% 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)
并且不定义一些指针函数!