2011-02-04 78 views

回答

35

是的,有。我建議閱讀與Mathematica上下文相關的文檔。簡而言之,所有變量都屬於某個上下文(名稱空間),並且所有變量都可以通過形式爲「ContextName`varName」的完全限定名稱進行訪問。如果只使用「varName」,Mathematica將在$ContextPath中搜索上下文(嘗試評估變量$ContextPath以查看它是什麼),並將使用找到該變量的第一個上下文。此外,每個筆記本都指定一個上下文(存儲在變量$Context中),其中存儲了所有變量(除非使用完全限定名稱)。

默認情況下,對於所有筆記本電腦,上下文是「全局」。同樣默認情況下,所有筆記本的$ ContextPath都包含「全局」上下文(以及「系統」等)。最終的結果是變量在筆記本之間共享,這可能會很快變得令人討厭。但是,有一個簡單的解決方案。要創建一個筆記本的「私人」背景下,評估以下:

SetOptions[EvaluationNotebook[], CellContext -> Notebook] 

這款筆記本將被分配一個唯一的上下文(計算變量$Context,看看它是什麼)。此外,全球範圍內將contextPath中(前嘗試與上述SetOptions[...]後評估$ContextPath,看看發生了什麼事情)

[更新中移除:作爲新的數學堆棧交換所指出的rcollyer,設置此選項作爲新筆記本的默認設置,請執行以下操作:打開Options Inspector(Ctrl + Shift + O),將範圍(在頂部的下拉列表中)從「Selection」更改爲「Global Preferences」;在左邊展開節點單元格選項 - >評估選項,並更改CellContext設置]

現在,這裏是如何創建一個共享上下文「筆記本」:

Begin["SharedContext`"]; 
varShared1 = "Shared string"; 
End[]; 

或者,您也可以」 VE剛剛輸入

SharedContext`varShared1 = "Shared string"; 

現在,您可以使用完全合格的名稱(「SharedContext`varShared1」將在任何筆記本電腦的工作),也可以在上下文中添加到$的contextPath:

AppendTo[$ContextPath, "SharedContext`"] 

如果您在所有筆記本中都這樣做,varShared1將變爲可見而沒有完整的名稱。總之,上下文的工作方式與許多其他搜索路徑非常相似。但是,有很多細微之處(例如,如果已經在其他某個上下文中定義了符號,則Begin [「SharedContext`」]/End []塊可能無法按預期工作 - 符號的現有上下文將會用來代替SharedContext`),所以我推薦一個健康的實驗和細讀文檔。

+0

是的。比我的好多了。刪除。 – 2011-02-04 14:32:35

1

我不確定這是否明智,但無論如何。

這是兩個筆記本電腦的原理圖解決方案。它可能是一般化的,但並不簡單。

  1. 打開兩個筆記本電腦

  2. 在他們每個人進入菜單 (評估 - >筆記本電腦的默認 背景 - >獨此筆記本) 這樣,符號不再被共享。

  3. 在每個筆記本輸入一些 像Context[]拿到筆記本 語境

  4. 現在在每個筆記本進入 以下代碼

Needs["Experimental`"]; 
    SetAttributes[f, HoldFirst]; 

    f[s_, val_] := [email protected]["Notebook$$17$799580`", 
        [email protected]@s, "=", [email protected]]; 

    ValueFunction[t] = f 

Notebook$$17$799580是其他筆記本電腦的情況下(這應該可以,當你想分享一個符號,就能夠獲得「自動」,但這只是一種概念證明。

現在進入

f[symbolToShare] 

就是這樣。

您可以雙向共享價值,或只在一個方向,進入F [X]只有在筆記本ÿ你希望作爲x的源值。其他Notebook將獲得更新後的值,但不會將其更新回來。

HTH!

編輯

邁向自動化:

你可能會得到所有其他打開的筆記本上下文以更新共享符號:

ctxs[]:= Complement[Contexts["Notebook$$*"], 
        [email protected][{Context[]}, 
        StringCases[Contexts["Notebook$$*"], __ ~~ "Private" ~~ __]]] 

所以你˚F會變成這樣的事情(不測試)

f[s_, val_] := [email protected][#, 
        [email protected]@s, "=", [email protected]]&/@ctxs[]; 
0

爲了讓所有的筆記本電腦獨特的環境開放選項督察並設置 單元選項評估選項細胞語境Notebook

相關問題