如何在匿名函数中使用变量?

MoW*_*MoW 4 matlab

我试图定义:

f = @(x) d*x
Run Code Online (Sandbox Code Playgroud)

其中d是先前定义的变量,比如d = 2.我的目标是让它返回:

@(x) 2*x
Run Code Online (Sandbox Code Playgroud)

但是,MATLAB返回:

@(x) d*x
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是在for循环中定义一系列函数句柄,例如

q = cell(n, 1);
for i = 1:n
    q{i} = @(y) sum(y(1:i));
end
Run Code Online (Sandbox Code Playgroud)

是否可以定义使用匿名函数定义中的索引的函数句柄数组?

Mar*_*cin 5

这是正确的.当你定义f = @(x) d*xmatlab将d在本地范围内寻找.由于d2在函数定义的时候,你的功能f将得到有效2*x.即使您稍后更改了d的值,例如d=10,'f'功能仍将使用2.

这是一个例子:

d = 2;

f = @(x) d*x;    

f(2) % gives 4;

d = 10;

f(2) % gives 4 again. matlab will 'remember' that d was 2 at the time of 
     % f function definition 
Run Code Online (Sandbox Code Playgroud)