我正在尝试找到以下循环的快捷方式。在开发mathematica的软件包时,一个是对.m
文件的代码进行更改,然后想要测试另一个笔记本中的更改。这是一个无限循环...
因此,我们有一个包package.m
和一个笔记本test_package.nb
来完成测试。目前,当我在.m
文件中更改某些内容时,我必须:
Quit[]
Needs["package`"]
笔记本中的变更可用,所以我可以测试它们。似乎没有Quit[]
它不起作用。
是否有更短的方法来迭代此开发循环?特别是避免戒烟?
后果
如果可以,我会接受ruebenko和Leonid的答案,因为两者都有帮助并解决了我的问题。但是,由于只能选择一个答案,我选择ruebenko's是因为简单和容易 - 只需将Needs
更改为Get
我克服了我的问题。尽管如此,Leonid的软件包确实更加复杂,并且可能在一天结束时产生更好的结果,但它必须安装,加载等。
答案 0 :(得分:8)
使用Get;如果根本没有加载,只需加载包。有时您需要小心并对包中的变量使用ClearAll。
答案 1 :(得分:8)
作为使用简单Get
的替代方法,由@ruebenko提取(这是一个很好的建议),你可以尝试使用我写的名为PackageManipulations`
的包,它可以做你想要的。它可用here。有一个笔记本的例子说明它是如何工作的,也可以在我链接的页面上找到。包可以重新加载,清除或删除给定的包(上下文)。函数PackageReload
专门做你想做的事。
它确实使用了Get
或Needs
,但此外它还会跟踪所谓的“转义符号”(公开导出但没有使用消息的符号,可能是“泄漏”实现细节),并且可选地可以解决阴影问题,有利于重新加载包。请注意,PackageReload
会自动在包裹的符号上调用Unprotect
和ClearAll
,因此解决了@ruebenko提到的问题。您可以在随附的示例笔记本中找到更多详细信息。
请注意,虽然我自己多次使用它,但我并不认为它没有错误:)
答案 2 :(得分:1)