wolfram-mathematica - 如何 DumpSave 函数?

标签 wolfram-mathematica

我尝试在模块中定义一个函数,然后使用 DumpSave 将函数定义保存到一个文件中。但是,重新加载函数失败。这是一个最小的例子

buildf[]:= Module[{res},
    res[x_]:=x^2;
    res
];
f=buildf[];
DumpSave["f.mx", f];
Clear[f];
Get["f.mx"]

现在我希望 f 是平方函数,但是在 Clear 语句之后它仍然未定义。我该如何解决这个问题?

问题与my earlier question密切相关几个月前,但那里的解决方案对我没有帮助。

感谢任何提示!

更新 buildf 正在读取多个数据文件,转换它们,根据它们定义规则并调用 Dispatch 来快速查找。 buildf 返回的函数类似于数据的 API。我想避免调用 buildf,而是加载已创建数据函数的二进制转储。

Save 方法看起来很有希望,但它仍然不起作用。我将尝试隔离问题,以便在此处重现。

最终更新 在 @Leonid 评论说局部变量的唯一性不能保证跨 session 之后,我决定只对普通数据结构使用这种“DumpSave 缓存机制”,而不是依赖于其他符号的函数。

最佳答案

您正在从 Module 返回局部变量 (res)。当然,这是行不通的,您最终得到的是 res 的“本地化”(重命名)版本。

尝试

f = buildf[]
?f

你会得到类似 f=res$538 的东西。此局部变量具有 Temporary 属性,可以随时删除(因此 f 可以停止工作)。

如果您DumpSave 符号f,它的定义为f=res$538 将被保存,并且可以重新加载(如您可以用 ?f 验证)。但这不是很有用。

这里的问题是:你为什么要使用这个 buildf 函数?你想达到什么目的?

编辑: 正如 Leonid 在下面指出的那样,我上面写的并不完全正确:从 Module 返回的带有 DownValue 的符号做似乎没有被删除,即使它们没有被引用。人们可能仍然想知道这种行为在不同版本之间是否一致以及将来是否相同。

关于wolfram-mathematica - 如何 DumpSave 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7896203/

相关文章:

fonts - 让 Mathematica 前端服从 FontFamily 选项

wolfram-mathematica - GraphPlot/GraphPlot3D 中的虚线边

wolfram-mathematica - 在 Workbench 中比较笔记本的步骤

wolfram-mathematica - 如何在 Mathematica 中编写最大似然估计?

wolfram-mathematica - 具有带下标和上标的参数

wolfram-mathematica - 找到由 Mathematica 中的积分定义的函数的最小值

loops - 数学确定性自动机

memory-management - SystemCache 和 MemoryInUse - 谁能解释这种行为?

wolfram-mathematica - Mathematica积分评估只是显示为格式正确的文本?