相关疑难解决方法(0)

使用Mathematica中的$ NewSymbol移动上下文

我一直在$NewSymbol努力寻找能够回答这个问题的东西.文档说

在实际创建符号之前应用$ NewSymbol.如果$ NewSymbol的操作导致创建符号(可能在不同的上下文中),则创建的符号将是使用的符号.

所以我尝试自动将一个特定的新符号移动到一个测试上下文中,该测试上下文应该阻止它在Global`*上下文中的创建,但是符号在两个上下文中都被创建.

In[1]:= Remove["Global`*"]
In[2]:= $NewSymbol=(Print[#1," : ",#2];
                    If[#1==="aLongTestSymbolName"&&#2==="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}
Run Code Online (Sandbox Code Playgroud)

我认为"aLongTestSymbolName"不应该在这种Global`背景下.任何人都可以看到我做错了什么或者我是否误解了文档?


注意:在两个上下文中创建符号不是上述链接到问题中自动突出显示的选项.我们的想法是保留某些符号名称,例如"x"~~___变量和"f"~~___函数,然后使用字符串模式$NewSymbol将符号移动到适当的突出显示的上下文.

wolfram-mathematica

7
推荐指数
1
解决办法
189
查看次数

标签 统计

wolfram-mathematica ×1