我是一个糟糕的缓存器:有时,当没有人在看时,我会缓存结果而不包含完整的上下文,如下所示:
f[x_]:=f[x]=x+a;
a=2; f[1];
DownValues[f]
Out[2]= {HoldPattern[f[1]]:>3,HoldPattern[f[x_]]:>(f[x]=x+a)}
这会导致非常微妙的错误,更重要的是,当我更改上下文时需要清除缓存。清除缓存的一种方法是完全清除Clear
符号并重复定义,但这并不是真正的解决方案。
我真正想要的是一种清除与符号关联的所有无模式 DownValues 的方法。
为了清楚起见,我将把我目前的解决方案作为答案,但如果在两个方面失败
- 它仅清除带有全数字参数的 DownValues
- 出于美观原因,我想避免使用
Block
获取 DownValues。
关于如何改进的任何想法ClearCache
?
我过去做过类似的功能(但我不记得在哪里)。
下面的代码能满足您的所有需求吗?
ClearCache[f_] := DownValues[f] = DeleteCases[DownValues[f],
_?(FreeQ[First[#], Pattern] &)]
这也许应该扩展到UpValues
and SubValues
。还有Head
of f
受限于Symbol
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)