Mik*_*ley 13 wolfram-mathematica
在Mathematica中,ClearAll的文档指出:
ClearAll[symb1, symb2, ...]
使用符号清除值,定义,属性,消息和默认值.
它还支持类似的格式,它可以清除与输入字符串模式匹配的任何值/定义:
ClearAll["form1", "form2", ...]
Run Code Online (Sandbox Code Playgroud)
但是还有函数Remove,文档说:
Remove[symbol1, ...]
完全删除符号,以便Mathematica不再识别它们的名称.
它还支持相同的基于模式的字符串输入ClearAll.
对我来说,似乎两个功能完全相同.使用其中一个有什么实际区别吗?
我知道,如果我举一个属性的象征,Clear不会删除,但ClearAll和Remove意志.但似乎Remove并且ClearAll正在做同样的事情.
rob*_*off 13
ClearAll 将符号留在符号表中:
In[1]:= x=7;
In[2]:= ?x
Global`x
x = 7
In[3]:= ClearAll[x]
In[4]:= ?x
Global`x
Run Code Online (Sandbox Code Playgroud)
Remove 将其从符号表中删除:
In[5]:= Remove[x]
In[6]:= ?x
Information::notfound: Symbol x not found.
Run Code Online (Sandbox Code Playgroud)
使用的一个原因Remove,而不是ClearAll是,如果一个符号还隐藏着另一个符号下你的$ contextPath中.这是一个人为的例子:
In[1]:= $ContextPath = { "Global`", "System`" };
In[2]:= Global`Sin[x_] := "hello"
Sin::shdw: Symbol Sin appears in multiple contexts {Global`, System`}
; definitions in context Global`
may shadow or be shadowed by other definitions.
In[3]:= Sin[1.0]
Out[3]= hello
In[4]:= ClearAll[Sin]
In[5]:= Sin[1.0]
Out[5]= Sin[1.]
In[6]:= Remove[Sin]
In[7]:= Sin[1.0]
Out[7]= 0.841471
Run Code Online (Sandbox Code Playgroud)
使用的另一个原因Remove是当您选择"编辑">"完成选择"(或在Mac上,按Command-K)时,笔记本界面仅包含已知符号.