Estaba jugando con $NewSymbol
tratando de encontrar algo para responder this question con. The docs say that
$ NewSymbol se aplica antes de que realmente se crea el símbolo . Si la acción de $ NewSymbol hace que se cree el símbolo , quizás en un contexto diferente, entonces el símbolo como creado será el utilizado.
así que traté de mover automáticamente un nuevo símbolo en particular en un contexto de prueba que debe evitar que su creación en el contexto Global`*
, pero el símbolo se crea en ambos contextos.
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}
creo que "aLongTestSymbolName"
no debería estar en el contexto Global`
. ¿Alguien puede ver lo que he hecho mal o si he malinterpretado la documentación?
Nota: Tener el símbolo creado en ambos contextos no es una opción para el resaltado automático en el anteriormente unido a cuestionar. La idea es reservar ciertos nombres de símbolos como "x"~~___
para variables y "f"~~___
para funciones y luego usar patrones de cadena en $NewSymbol
para mover los símbolos al contexto resaltado apropiado.
W - En realidad, en su ejemplo 'aSecondSymbol' se crea en' 'Global'' 'y' 'TestContext'' '. ¿Crees que la documentación es incorrecta entonces? Tal vez funcionó en una versión anterior, pero se rompió y nadie se dio cuenta ... Creo que debería preguntarle a WRI. – Simon
@Simon, eso es correcto. Mi punto es que todavía se crea en '' Global' 'aparentemente de forma completamente independiente de todo lo que invoca' $ NewSymbol', y que 'Print' /' If' etc. no están relacionados con el problema. Espero que Michael, Daniel o Sasha se detengan con una respuesta. –
Parece que uno de nuestros empleados locales amigables de WRI se ha detenido, así que envié un informe de error a WRI. – Simon