【发布时间】:2014-03-08 01:34:56
【问题描述】:
我最近了解到,匿名函数可以携带大量未使用的数据,即使这些数据是在匿名函数实例化之后创建的。以下示例与 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=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 的更新?
这些事情似乎很重要,因为很明显,我最终可能会携带大量在创建匿名函数后分配的意外内存。
【问题讨论】:
标签: matlab