匿名函数返回一个数组的长度更新 - MATLAB
问题描述:
我试图写一个简单的匿名函数返回一个数组匿名函数返回一个数组的长度更新 - MATLAB
>> a=[1 2 3];
>> f = @() length(a);
>> f()
3
>> a = [1 2 3 4];
>> f()
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)
答
根据变量定义匿名函数使该变量在函数内保持静态。即
% 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)
并没有定义一些指针的函数匿名函数!
有没有理由不希望'a'作为参数传入? – jodag
您只需在函数中调用'length',那么为什么不使用'length'呢?如果你需要一个函数句柄,使用'f = @length;'。 – gnovice
您是否阅读过[文档的这一部分](https://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html#f4-71621)? – gnovice