如何在不使用Prepend
的情况下更改单元格的$ ContextPath:
$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中的上下文会发生变化?在其他笔记本中,这不会发生。我猜它与参考样式表的设置有关,但我无法弄明白。我们如何才能临时更改文档笔记本的设置,以便我们可以在整个笔记本中使用全局上下文?
答案 0 :(得分:1)
所以,如果我理解正确,你在文档中心笔记本中运行一些命令 - 你不理解上下文的行为?
文档中心使用样式表(Reference.nb),其中Cell[StyleData["Input"]...
具有选项CellContext->CellGroup
。使用文档中心页面上的Option Inspector也可以看到这一点:
此设置非常适用于文档中心,因为这意味着其中的所有示例都不会相互干扰或与您的Global`
定义相关。
您还可以通过评估菜单为任何特定笔记本设置默认上下文: