gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中使用 $NewSymbol 移动上下文

转载 作者:行者123 更新时间:2023-12-04 08:15:53 25 4
gpt4 key购买 nike

我在玩 $NewSymbol试图找到答案this question和。 The docs say that

$NewSymbol is applied before the symbol is actually created. If the action of $NewSymbol causes the symbol to be created, perhaps in a different context, then the symbol as created will be the one used.



所以我尝试自动将一个特定的新符号移动到测试上下文中,这应该会阻止它在 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}

我相信 "aLongTestSymbolName"不应该在 Global`语境。
谁能看到我做错了什么,或者我是否误解了文档?

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

最佳答案

那是因为您将符号名称传递给了 Print ,它立即在 Global` 中生成了符号. :-)

或不。我真的应该在回答之前尝试一些事情,但我想我知道这个。哎呀。

现在在我看来 $NewSymbol不拦截符号的创建,或者如果拦截了,如何使用它尚不清楚。

如果一个人使用:

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

然后:
In[10]:= aNewSymbol

During evaluation of In[10]:= Name: Global`aNewSymbol

Out[10]= aNewSymbol

我们看到 $NewSymbol不像 $PrePrint 那样工作因为它的输出不会成为表达式。

因此,如果我们使用:
$NewSymbol = Symbol["TestContext`" <> #] &;

aSecondSymbol
aSecondSymbol快乐地创建于 Global`仿佛什么都没有改变。

$NewSymbol可用于指导创建符号的上下文,正如文档所述,我不清楚如何做到这一点。

关于wolfram-mathematica - 在 Mathematica 中使用 $NewSymbol 移动上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6167406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com