在Mathematica中,ClearAll州的文档:
ClearAll[symb1, symb2, ...]
使用符号清除值,定义,属性,消息和默认值。
它还支持类似的格式,可以清除与输入字符串模式匹配的任何值/定义:
ClearAll["form1", "form2", ...]
但是还有函数Remove,文档说明了这些:
Remove[symbol1, ...]
完全删除符号,以便Mathematica不再识别它们的名称。
它还支持ClearAll
支持的基于模式的字符串输入。
对我来说,似乎两个功能完全相同。使用其中一个是否有任何实际差异?
我知道如果我为符号提供属性,Clear
将不会删除它,但ClearAll
和Remove
会删除。但似乎Remove
和ClearAll
正在做同样的事情。
答案 0 :(得分:13)
ClearAll
将符号留在符号表中:
In[1]:= x=7;
In[2]:= ?x
Global`x
x = 7
In[3]:= ClearAll[x]
In[4]:= ?x
Global`x
Remove
将其从符号表中删除:
In[5]:= Remove[x]
In[6]:= ?x
Information::notfound: Symbol x not found.
使用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
使用Remove
的另一个原因是,当您选择编辑>时,笔记本界面仅包含已知符号。完成选择(或在Mac上,按Command-K)。