wolfram-mathematica - Mathematica - 分离笔记本

标签 wolfram-mathematica

关闭。这个问题是off-topic .它目前不接受答案。












想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。

10年前关闭。




Improve this question




有没有办法分离打开的 Mathematica 笔记本,使它们不共享任何变量?如何让它共享一些变量但不是全部?

最佳答案

就在这里。我建议阅读与 Mathematica 上下文相关的文档。简而言之,所有变量都属于某个上下文(命名空间),并且所有变量都可以通过它们的“ContextName`varName”形式的完全限定名称来访问。如果您只使用“varName”,Mathematica 将在 $ContextPath 中搜索上下文(尝试评估变量 $ContextPath 以查看它是什么),并将使用找到该变量的第一个上下文。此外,每个笔记本都指定了一个上下文(存储在变量 $Context 中),其中存储了所有变量(除非使用完全限定名称)。

默认情况下,所有笔记本的上下文都是“全局”。同样默认情况下,所有笔记本的 $ContextPath 包括“Global`”上下文(以及“System`”和其他一些)。最终结果是变量在笔记本之间共享,这很快就会变得烦人。但是,有一个简单的解决方案。要为笔记本创建“私有(private)”上下文,请评估以下内容:

SetOptions[EvaluationNotebook[], CellContext -> Notebook]

该笔记本将被分配一个唯一的上下文(评估变量 $Context 以查看它是什么)。此外,全局上下文将从 ContextPath 中删除(尝试在上面的 $ContextPath 之前和之后评估 SetOptions[...] 以查看发生了什么。)

[ 更新 :正如 rcollyer 在新的 Mathematica 堆栈交换中指出的那样,要将此选项设置为新笔记本的默认值,请执行以下操作:打开选项检查器 (Ctrl+Shift+O),更改范围(在顶部的下拉列表中) 从“选择”到“全局偏好”;在左侧展开节点 Cell Options -> Evaluation Options,并将 CellContext 设置更改为“Notebook”。]

现在,这是创建共享上下文的方法:
Begin["SharedContext`"];
varShared1 = "Shared string";
End[];

或者,您可以只输入
SharedContext`varShared1 = "Shared string";

现在您可以使用完全限定的名称(“SharedContext`varShared1”可以在任何笔记本中使用),或者您可以将上下文添加到 $ContextPath:
AppendTo[$ContextPath, "SharedContext`"]

如果您在所有笔记本中执行此操作,则 varShared1 将在没有完全限定名称的情况下变得可见。

总而言之,上下文的工作方式与许多其他搜索路径非常相似。然而,有许多微妙之处(例如,如果一个符号已经在其他上下文中定义,那么 Begin["SharedContext`"]/End[] block 可能不会像您期望的那样工作 - 符号的现有上下文将使用而不是 SharedContext`),所以我建议进行健康的实验并仔细阅读文档。

关于wolfram-mathematica - Mathematica - 分离笔记本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4896011/

相关文章:

wolfram-mathematica - 如何检查两个向量的元素相等性?

dynamic - 在 DynamicModule 中打印动态变量

wolfram-mathematica - 如何在 mathematica 中显示循环内的图

wolfram-mathematica - 在需要时在行之间的网格内添加分隔线的任何技巧

wolfram-mathematica - 防止在衍生输出中重新排序?

wolfram-mathematica - 如何将 ListPlot 的图形与 Plot 的图形结合起来?

performance - 为什么这些例程在 Mathematica 中的相对效率高?

c++ - C++中长表达式的优化

wolfram-mathematica - 这有标准功能吗?

wolfram-mathematica - 带参数的 NDSolve