如何在不使用Prepend的情况下更改单元格的$ContextPath
$ContextPath = Prepend[$ContextPath, "PackageName`"]我浏览了$ContextPath的文档,决定评估其中的第一个输入单元格。
评估前:

评估后:

我猜这里的不同之处在于,在编写本文档时,并没有为编写它的人启用WebServices。我们可以看到Global位于该单元格的上下文中,因为已经明确提到了这一点。通过转到Cell > Show Expression查看表达式。

选项CellContext设置为全局。现在,让我们创建一个新的单元格并计算$Context。

这意味着在该单元格中,我不能使用我在其他notebooks中创建的任何全局对象。我们可以通过更改单元格的CellContext选项来添加全局。我们通过显示表达式和编辑来实现这一点。当您进行评估时,您将看到上下文已更改为全局。现在,让我们在刚刚将上下文更改为global的单元格中尝试一下。
Print["Outside Module = ", $ContextPath]
Module[{},
Print["Inside Module = ", $ContextPath];
Manipulate[
Print["Inside Manipulate = ", $ContextPath];
Row[{
Plot[x, {x, -3, 3}, PlotRange -> {{-3, 3}, {-3, 3}}]
}],
{{p1, {-1, 2}}, Locator, Appearance -> "L1"}
]
]你得到这样的东西了吗:

为什么操作中的上下文会发生变化?在其他笔记本中,这种情况是不会发生的。我猜这与引用样式表的设置有关,但我就是搞不清楚。我们如何临时更改记录笔记本的设置,以便可以在整个笔记本中的任何位置使用全局上下文?
发布于 2011-07-14 17:44:43
所以,如果我没理解错的话,你在一个文档中心的笔记本上运行一些命令--你不理解上下文的行为?
文档中心使用样式表(Reference.nb),其中Cell[StyleData["Input"]...具有选项CellContext->CellGroup。这也可以使用文档中心页面上的选项Inspector来查看:

这个设置非常适合文档中心,因为它意味着其中的所有示例不会相互干扰,也不会干扰您的Global`定义。
您还可以通过评估菜单设置任何特定笔记本的默认上下文:

https://stackoverflow.com/questions/6690094
复制相似问题