2011-07-29 6 views
8

Podemos eliminar todos los símbolos en un contexto particular usando Remove["context`*"]. ¿Pero es posible eliminar "context`" del sistema para que ya no aparezca en Contexts[]?¿Es posible eliminar "context`" de la lista de Contextos cargados []?

+2

Will 'CleanSlate' no hará esto? – tomd

+0

No veo cómo se puede hacer. Si tiene problemas con contextos conflictivos, entonces eliminaría el contexto del '$ ContextPath' para que no me cause más problemas. – jmlopez

+1

@TomD Sí, como ha demostrado Bill Rowe en [su respuesta MathGroup] (http://groups.google.com/group/comp.soft-sys.math.mathematica/msg/de14f4aff3c6e780), '' AppendTo [$ ContextPath , "contexto'"]; CleanSlate ["context'"] '' hará esto (si '' "context'" '' no estaba en el '$ ContextPath' inicial cuando se leyó' CleanSlate.m'). Pero al buscar rápidamente en la descripción de 'CleanSlate' en el archivo' CleanSlate.m', se revela que simplemente purga '' "context'" '' ** junto con todos sus subcontextos ** para que este contexto se elimine automáticamente. –

Respuesta

6

Por lo que puedo decir (una conjetura), un contexto se elimina automáticamente de Contexts[] una vez que se vacía (no tiene símbolos). Al menos, esto sucede en mis pruebas. Aquí es uno:

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 

Esto también puede explicar por qué llamar Contexts[] toma una fracción considerable de un segundo - el sistema debe verificar para cada contexto de si es o no está vacía. De todos modos, la respuesta a su pregunta parece simple: elimine todos los símbolos y el contexto se eliminará del Contexts[]. Esto también funciona para contextos cargados por el sistema; puede intentar algunos (XML' por ejemplo), aunque no hace falta decir que esto no es una buena práctica, por decir lo menos.

+0

Esto no funciona para mí ya que el paquete aún permanece en '$ ContextPath', por ejemplo, 'Needs' no lo volverá a cargar. ¿Alguna idea de por qué? –

+0

@ThomasFankhauser No tengo idea. Pero estaba discutiendo aquí algo más. Haga un pequeño ejemplo autónomo para ilustrar su problema y pregúntele a M.SE: de esta manera tendrá más atención sobre su problema. –

Cuestiones relacionadas