我正在玩$NewSymbol
試圖找到答案this question與。 The docs say that
$ NewSymbol應用於實際創建 符號之前。如果$ NewSymbol的 操作導致創建符號 (可能位於不同的 上下文中),則創建的符號 將成爲使用的符號。
於是,我就自動移動特定的新符號到應防止其在Global`*
上下文創建一個測試情境,但符號是在兩種情況下創建的。
In[1]:= Remove["Global`*"]
In[2]:= $NewSymbol=(Print[#1," : ",#2];
If[#1==="aLongTestSymbolName"&==="Global`",
Symbol["TestContext`"<>#1]])&;
In[3]:= x
During evaluation of In[3]:= x : Global`
Out[3]= x
In[4]:= aLongTestSymbolName
During evaluation of In[4]:= aLongTestSymbolName : Global`
During evaluation of In[4]:= aLongTestSymbolName : TestContext`
Out[4]= aLongTestSymbolName
In[5]:= Names["Global`*"]
Out[5]= {aLongTestSymbolName,x}
In[6]:= Names["TestContext`*"]
Out[6]= {TestContext`aLongTestSymbolName}
我相信"aLongTestSymbolName"
不應該在Global`
環境。 任何人都可以看到我做錯了什麼,或者如果我誤解了文檔?
注意:在兩個上下文中創建的符號不是上述鏈接問題中自動突出顯示的選項。這個想法是爲變量保留某些符號名稱,例如"x"~~___
,爲函數保留"f"~~___
,然後使用$NewSymbol
中的字符串模式將符號移動到適當的高亮上下文中。
W--實際上,在你的例子中,''GlobalSeq''和''TestContext'''都創建了aSecondSymbol。 您認爲文檔是錯誤的嗎?也許它在舊版本中工作,但破裂,沒有人注意到...我想我應該問WRI。 – Simon 2011-05-29 22:45:37
@Simon,這是正確的。我的觀點是,它仍然是在''Global''中創建的,顯然完全獨立於'$ NewSymbol'調用的任何東西,並且'Print' /'If'等與問題無關。我希望邁克爾,丹尼爾或薩沙會停下來回答。 – 2011-05-30 07:58:00
看起來我們當地的一個友好的WRI員工已經不在了 - 所以我向WRI發送了一個錯誤報告。 – Simon 2011-05-30 22:42:24