2011-07-29 71 views
8

我們可以使用Remove["context`*"]刪除特定上下文中的所有符號。但是否可以從系統中刪除"context`"本身,以便它不再在Contexts[]中列出?是否可以從加載的上下文[]列表中刪除「上下文」?

+2

'CleanSlate'不會這樣做嗎? – tomd

+0

我不明白它是如何完成的。如果你在上下文衝突時遇到問題,那麼我會從'$ ContextPath'中移除上下文,這樣它不會給我帶來更多的麻煩。 – jmlopez

+1

@TomD是的,正如Bill Rowe在[他的MathGroup答案](http://groups.google.com/group/comp.soft-sys.math.mathematica/msg/de14f4aff3c6e780)中展示的那樣,AppendTo [$ ContextPath ,「上下文」「]; CleanSlate [「context'」]''會執行此操作(如果讀入'CleanSlate.m'時''「context'」''不在最初的'$ ContextPath'中)。但是,快速查看'CleanSlate.m'文件中的'CleanSlate'描述顯示,它只是清除''''context''' **及其所有子上下文**,以便自動刪除該上下文。 –

回答

6

據我所知(猜測),一旦上下文變爲空(沒有符號),將自動從Contexts[]中刪除上下文。至少,這發生在我的測試中。這裏是一個:

In[1]:= 
BeginPackage["Test`"] 
EndPackage[] 

Out[1]= Test` 

In[3]:= MemberQ[Contexts[],"Test`"] 
Out[3]= False 

In[4]:= Test`a 
Out[4]= a 

In[5]:= MemberQ[Contexts[],"Test`"] 
Out[5]= True 

In[6]:= Remove["Test`*"] 
In[7]:= MemberQ[Contexts[],"Test`"] 

Out[7]= False 

這也可以解釋爲什麼叫Contexts[]需要一秒鐘的相當大的部分 - 系統必須檢查每一個方面它是否是空的。無論如何,你的問題的答案似乎很簡單 - 刪除所有符號,上下文將從Contexts[]中刪除。這也適用於系統加載的上下文 - 你可以嘗試一些(例如XML'),儘管不用說這不是一個好的做法,至少可以說。

+0

這對我不起作用,因爲包仍然保留在'$ ContextPath'中,例如, 'Needs'不會重新加載它。任何想法爲什麼? –

+0

@ThomasFankhauser不知道。但我在這裏討論別的東西。製作一個獨立的小例子來說明你的問題並向M.SE提問 - 這樣你就會對你的問題有更多的關注。 –

相關問題