Wolfram mathematica 如何防止软件包重新加载?

Wolfram mathematica 如何防止软件包重新加载?,wolfram-mathematica,Wolfram Mathematica,考虑以下几点 Needs["Combinatorica`"]; $ContextPath = DeleteCases[$ContextPath, "Combinatorica`"]; 当我第二次执行它时,速度快了10倍,而且它不会打印兼容性警告 Mathematica如何知道此程序包已加载? 当从$ContextPath加载和删除包时,有什么好方法可以避免重新加载包? 对于一些图算法,我依赖于Combinatica,但每次加载元素时,我都需要重新定义元素,所以我尝试将重新加载保持在最小值 您可

考虑以下几点

Needs["Combinatorica`"];
$ContextPath = DeleteCases[$ContextPath, "Combinatorica`"];
当我第二次执行它时,速度快了10倍,而且它不会打印兼容性警告

Mathematica如何知道此程序包已加载? 当从$ContextPath加载和删除包时,有什么好方法可以避免重新加载包? 对于一些图算法,我依赖于Combinatica,但每次加载元素时,我都需要重新定义元素,所以我尝试将重新加载保持在最小值

您可能需要查看$Packages变量。第一次加载时,会将上下文附加到其中。第二次,它根本没有被加载,因为它已经在$Packages中,所以第二次除了将上下文恢复到$ContextPath之外,什么也没有发生,但是您还是删除了它。您可以通过在[Get]上使用来验证Get是否第二次被调用

因为第二次没有实际的重新加载,所以您不必做任何事情。但这也意味着,如果要真正重新加载包,必须首先从$Packages中删除其上下文,否则对Needs的调用除了将上下文返回到$ContextPath之外将什么也做不了

您可能需要查看$Packages变量。第一次加载时,会将上下文附加到其中。第二次,它根本没有被加载,因为它已经在$Packages中,所以第二次除了将上下文恢复到$ContextPath之外,什么也没有发生,但是您还是删除了它。您可以通过在[Get]上使用来验证Get是否第二次被调用

因为第二次没有实际的重新加载,所以您不必做任何事情。但这也意味着,如果要真正重新加载包,必须首先从$Packages中删除其上下文,否则对Needs的调用除了将上下文返回到$ContextPath之外将什么也做不了


从需求的使用信息:

需要[context`]加载适当的 如果指定的上下文不是 已经在$Packages中


您是否与其他人共享您的代码,或者您是否可以编辑Combinatica的副本,以避免为元素添加有问题的定义?可能应该验证Combinatica在内部使用它的方式不会导致问题。

来自需求使用消息:

需要[context`]加载适当的 如果指定的上下文不是 已经在$Packages中


您是否与其他人共享您的代码,或者您是否可以编辑Combinatica的副本,以避免为元素添加有问题的定义?可能应该验证Combinatica在内部使用它不会导致问题。

Combinatica定义元素作为一部分工作,所以如果它依赖于该定义,我希望会有一些消息。Combinatica中的所有图论算法运行时都没有错误消息。是的,我在分享代码,它依赖于像MemberQ一样工作的元素,在我知道Combinatica的重新定义之前这似乎是个好主意啊,Combinatica甚至说它对元素的使用已经过时了,但仍然有效。Combinatica定义元素作为一部分工作,所以我希望如果它依赖于这个定义,会有一些信息。Combinatica中的所有图论算法运行时都没有错误消息。是的,我在分享代码,它依赖于像MemberQ一样工作的元素,在我知道Combinatica的重新定义之前这似乎是个好主意啊,Combinatica甚至说它对元素的使用已经过时了,但仍然有效。我明白了,谢谢。我猜@Yaroslav:没错。Get@Yaroslav:几年前我写了一个名为packagemanipulations的包,它可以对包执行许多操作,包括重新加载和删除。我使用它进行交互式软件包开发,因为它允许干净的“热插拔”——在不结束会话的情况下重新加载软件包。无论如何,它包含一些代码,可以通过重新加载来说明这些内容。我知道了,可以在这里买到,谢谢。我猜@Yaroslav:没错。Get@Yaroslav:几年前我写了一个名为packagemanipulations的包,它可以对包执行许多操作,包括重新加载和删除。我使用它进行交互式软件包开发,因为它允许干净的“热插拔”——在不结束会话的情况下重新加载软件包。无论如何,它包含一些代码,可以通过重新加载来说明这些内容。可于