考虑以下
Needs["Combinatorica`"];
$ContextPath = DeleteCases[$ContextPath, "Combinatorica`"];
当我第二次执行它时,速度提高了10倍,并且不会打印兼容性警告。
$ContextPath
加载并删除包时,避免重新加载包的好方法是什么?我依赖于Combinatorica的一些图算法,但每次加载时我都需要重新定义Element
,所以我试图将重新加载到最小值
答案 0 :(得分:3)
来自需求的使用消息:
需要[“context`”]加载一个合适的 如果指定的上下文不是文件 已经在$ Packages。
您是否与其他任何人共享您的代码,或者您是否可以编辑您的Combinatorica副本,而不是为Element添加有问题的定义? (应该可以验证Combinatorica是否在内部使用它会导致问题。)
答案 1 :(得分:2)
您可能希望查看$Packages
变量。第一次加载时,您的上下文会被附加到它上面。第二次,它根本没有加载,因为它已经在$Packages
,所以没有在第二次发生(除了将上下文带回$ContextPath
之外,但你无论如何都要删除它。您可以使用Get
验证是否第二次未调用On[Get]
。
由于第二次没有实际重新加载,您无需执行任何操作。但这也意味着如果你想真正重新加载包,你必须先从$Packages
删除它的上下文,否则对Needs
的调用将不会做任何事情,除非你回复你的上下文返回$ContextPath
。