更改后更新(重新加载)mathematica包

时间:2011-12-09 09:25:41

标签: wolfram-mathematica

我正在尝试找到以下循环的快捷方式。在开发mathematica的软件包时,一个是对.m文件的代码进行更改,然后想要测试另一个笔记本中的更改。这是一个无限循环...

因此,我们有一个包package.m和一个笔记本test_package.nb来完成测试。目前,当我在.m文件中更改某些内容时,我必须:

Quit[]
Needs["package`"]
笔记本中的

变更可用,所以我可以测试它们。似乎没有Quit[]它不起作用。

是否有更短的方法来迭代此开发循环?特别是避免戒烟?

后果

如果可以,我会接受ruebenko和Leonid的答案,因为两者都有帮助并解决了我的问题。但是,由于只能选择一个答案,我选择ruebenko's是因为简单和容易 - 只需将Needs更改为Get我克服了我的问题。尽管如此,Leonid的软件包确实更加复杂,并且可能在一天结束时产生更好的结果,但它必须安装,加载等。

3 个答案:

答案 0 :(得分:8)

使用Get;如果根本没有加载,只需加载包。有时您需要小心并对包中的变量使用ClearAll。

答案 1 :(得分:8)

作为使用简单Get的替代方法,由@ruebenko提取(这是一个很好的建议),你可以尝试使用我写的名为PackageManipulations`的包,它可以做你想要的。它可用here。有一个笔记本的例子说明它是如何工作的,也可以在我链接的页面上找到。包可以重新加载,清除或删除给定的包(上下文)。函数PackageReload专门做你想做的事。

它确实使用了GetNeeds,但此外它还会跟踪所谓的“转义符号”(公开导出但没有使用消息的符号,可能是“泄漏”实现细节),并且可选地可以解决阴影问题,有利于重新加载包。请注意,PackageReload会自动在包裹的符号上调用UnprotectClearAll,因此解决了@ruebenko提到的问题。您可以在随附的示例笔记本中找到更多详细信息。

请注意,虽然我自己多次使用它,但我并不认为它没有错误:)

答案 2 :(得分:1)

最简单的方法是在程序包的最开头使用Clear或更好的ClearAll打包符号,如下所示

BeginPackage["SomePackage`"];
ClearAll[ ASymbol, AnotherSymbol, ...];

这可确保您在加载时获得干净的平板。一旦软件包更稳定,这会更容易,但我发现如果我在最初开发软件包时不这样做,它就无法完成。