如何防止包重装?

时间:2011-01-21 21:22:24

标签: wolfram-mathematica

考虑以下

Needs["Combinatorica`"];
$ContextPath = DeleteCases[$ContextPath, "Combinatorica`"];

当我第二次执行它时,速度提高了10倍,并且不会打印兼容性警告。

  1. Mathematica如何知道此包已经加载?
  2. $ContextPath加载并删除包时,避免重新加载包的好方法是什么?
  3. 我依赖于Combinatorica的一些图算法,但每次加载时我都需要重新定义Element,所以我试图将重新加载到最小值

2 个答案:

答案 0 :(得分:3)

来自需求的使用消息:

  

需要[“context`”]加载一个合适的   如果指定的上下文不是文件   已经在$ Packages。

您是否与其他任何人共享您的代码,或者您是否可以编辑您的Combinatorica副本,而不是为Element添加有问题的定义? (应该可以验证Combinatorica是否在内部使用它会导致问题。)

答案 1 :(得分:2)

  1. 您可能希望查看$Packages变量。第一次加载时,您的上下文会被附加到它上面。第二次,它根本没有加载,因为它已经在$Packages,所以没有在第二次发生(除了将上下文带回$ContextPath之外,但你无论如何都要删除它。您可以使用Get验证是否第二次未调用On[Get]

  2. 由于第二次没有实际重新加载,您无需执行任何操作。但这也意味着如果你想真正重新加载包,你必须先从$Packages删除它的上下文,否则对Needs的调用将不会做任何事情,除非你回复你的上下文返回$ContextPath