1

如何在不使用的情况下更改单元格的 $ContextPath Prepend

$ContextPath = Prepend[$ContextPath, "PackageName`"]

我正在查看文档,$ContextPath并决定评估其中的第一个输入单元格。

评估前:

在此处输入图像描述

评估后:

在此处输入图像描述

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

在此处输入图像描述

该选项CellContext设置为全局。现在,让我们创建一个新单元格并评估$Context.

在此处输入图像描述

这意味着在该单元格内,我无法使用我在其他笔记本中创建的任何全局对象。我们可以通过更改单元格的 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"}
  ]
 ]

你有没有得到这样的东西:

在此处输入图像描述

为什么 Manipulate 内部的上下文会发生变化?在其他笔记本中,这不会发生。我猜它与参考样式表的设置有关,但我无法弄清楚。我们如何临时更改文档笔记本的设置,以便我们可以在整个笔记本的任何地方使用全局上下文?

4

1 回答 1

1

因此,如果我对您的理解正确,您正在文档中心笔记本中运行一些命令-您不了解上下文的行为?

文档中心使用Cell[StyleData["Input"]...具有选项的样式表 (Reference.nb) CellContext->CellGroup。使用文档中心页面上的选项检查器也可以看到这一点:

选项检查器

这个设置对于文档中心来说是非常有用的,因为这意味着那里的所有示例都不会相互干扰或与您的Global`定义发生冲突。


您还可以通过评估菜单为任何特定笔记本设置默认上下文:

评估菜单

于 2011-07-14T09:44:43.147 回答