Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica Mathematica中使用$NewSymbol移动上下文_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica Mathematica中使用$NewSymbol移动上下文

Wolfram mathematica Mathematica中使用$NewSymbol移动上下文,wolfram-mathematica,Wolfram Mathematica,我在玩弄$NewSymbol试图找到一些答案 $NewSymbol在 符号实际上是被创建的。如果 $NewSymbol的操作导致符号 被创造出来,也许是在一个不同的世界里 上下文,然后是创建的符号 将是一个使用 因此,我尝试将一个特定的新符号自动移动到一个测试上下文中,这将阻止它在Global`*上下文中创建,但该符号是在两个上下文中创建的 In[1]:= Remove["Global`*"] In[2]:= $NewSymbol=(Print[#1," : ",#2];

我在玩弄
$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}
[1]中的
:=删除[“全局”*“]
在[2]:=$NewSymbol=(Print[#1,“:”,#2];
如果[#1==“aLongTestSymbolName”&&&&==“Global`”,
符号[“TestContext`”#1]]&;
在[3]中:=x
在[3]中计算时:=x:Global`
Out[3]=x
在[4]:=aLongTestSymbolName中
在[4]中对的求值期间:=aLongTestSymbolName:Global`
在[4]:=aLongTestSymbolName:TestContext中对的求值期间`
Out[4]=aLongTestSymbolName
在[5]:=Names[“Global`*]”
Out[5]={aLongTestSymbolName,x}
在[6]:=Names[“TestContext`*]”
Out[6]={TestContext`aLongTestSymbolName}
我认为
“aLongTestSymbolName”
不应该在
全局`
上下文中。 谁能看出我做错了什么,或者我是否误解了文档



注意:在两种上下文中创建符号不是上述链接到问题的自动突出显示选项。其思想是保留某些符号名称,例如变量的
“x”~~~~~~~~~~~~~~~~~~~代码>,函数的
“f”~~~~~~~~~~~~~~~~~~~~~~代码>,然后使用
$NewSymbol
中的字符串模式将符号移动到适当的突出显示上下文中。

这是因为您将符号名称传递给了
Print
,这立即使符号在
全局`
:-)

或者不是。在回答之前我真的应该试一下,但我想我知道这个。哎呀


在我看来,
$NewSymbol
似乎没有截获符号的创建,或者如果截获了,如何利用它还不清楚

如果使用:

$NewSymbol = Print["Name: ", #2, #] &;
然后:

我们看到,
$NewSymbol
的工作方式与
$PrePrint
不同,因为它的输出不会变成表达式

因此,如果我们使用:

$NewSymbol = Symbol["TestContext`" <> #] &;

aSecondSymbol
$NewSymbol=Symbol[“TestContext`”#]&;
第二个符号
aSecondSymbol
Global`
中愉快地创建,就好像什么都没有改变一样

如文档所述,如果可以使用
$NewSymbol
来指导符号创建的上下文,我不清楚该如何操作。

在关于上下文问题中,您可能会发现,只要在评估的解析阶段出现新符号,就会将该符号添加到当前上下文中。在这种情况下,会将aLongTestSymbolName作为#1提交给打印,因此会在当前上下文
Global`
中创建。我认为在
$NewSymbol
函数中没有任何方法可以防止这种情况


文章提到,即使您使用
Begin[“Context1`]”;某些符号;结束[]
someSymbol不会被放置在
Context1`
上下文中,除非
Begin[“Context1`”]
在单独的一行上求值。

请参见我刚刚取消删除的答案。我认为这是不对的,因为根据文档,符号和上下文名称是作为字符串传递的。@Mr.Wiz-hmmm,yerright。也许mma在通过之前做了类似于ToString[符号]的事情?这将创建符号。文档说$NewSymbol是在创建符号之前计算的。我想象新的符号代码在遇到未知字符串时被
MakeExpression
调用。但在创建符号之前,它会运行$NewSymbol,并将该字符串作为参数。W-实际上,在您的示例中,
aSecondSymbol
是在“全局”和“测试上下文”中创建的。那么你认为文件有错吗?也许它在旧版本中工作,但是坏了,没有人注意到。。。“我想我应该问问瑞。”西蒙,没错。我的观点是,它仍然是在
Global`
中创建的,显然完全独立于
$NewSymbol
调用的任何内容,并且
如果
等与问题无关,则打印
/
。我希望Michael、Daniel或Sasha能过来回答。我们当地友好的WRI员工似乎没有来过——所以我向WRI发送了一份错误报告。@Simon,WRI有什么回应吗?@Alexey:我的电子邮件已添加到现有的错误报告中。当v9发布时,我们可能会听到更多。。。
$NewSymbol = Symbol["TestContext`" <> #] &;

aSecondSymbol