我最近了解到匿名函数可以携带大量未使用的数据,即使这些数据是在实例化匿名函数之后创建的.以下示例与FUNCTIONS命令一起说明了这一点,
function fun=test %place in an mfile
a=1;
b=2;
c=3;
fun=@(x)x+b+a;
a=7;
b=rand(1000);
c=5;
q=3;
r=4;
end
现在,回到基础工作区,当我将functions()命令应用于’fun’时,我明白了
>> fun=test; s=functions(fun); s.workspace{:}
ans =
b: 2
a: 1
ans =
fun: @(x)x+b+a
a: 1
b: [1000x1000 double]
c: 3
我想了解(如果可能的话,还有官方文档)匿名函数用来决定携带哪些数据的规则.上面似乎表明s.workspace {1}将始终包含匿名函数实际使用的外部变量及其值.与此同时,s.workspace {2}似乎包含了在定义fun之前进入范围的变量的更新.我是否正确这些是规则?但是,如果是这样,那么为什么s.workspace {2}包含对b的更新,而不是a和c?
这些事情看起来很重要,因为很明显,我最终会携带大量无意识的内存,这些内存是在创建匿名函数后分配的.