【问题标题】:Difference between Clear and Remove in MathematicaMathematica 中清除和删除的区别
【发布时间】:2011-12-14 21:46:09
【问题描述】:

在 Mathematica 中,ClearAll 的文档指出:

ClearAll[symb1, symb2, ...]
用符号清除值、定义、属性、消息和默认值。

它还支持类似的格式,它可以清除与输入字符串模式匹配的任何值/定义:

ClearAll["form1", "form2", ...]

但也有函数Remove,文档说:

Remove[symbol1, ...]
完全删除符号,因此 Mathematica 不再识别它们的名称。

它还支持ClearAll 支持的基于模式的字符串输入。

在我看来,这两个函数似乎完成了完全相同的事情。使用其中一种有什么实际区别吗?

我知道如果我为符号赋予属性,Clear 不会删除它,但 ClearAllRemove 会。但似乎RemoveClearAll 正在做同样的事情。

【问题讨论】:

  • 这个最近的 Mathgroup 线程似乎很相关:groups.google.com/group/comp.soft-sys.math.mathematica/…。特别注意该线程中 Oleksandr Rasputinov 的第三篇文章(距离线程开头的第 15 个)-他给出了一些很好的理由说明何时可能需要 Remove 以及它的特别之处。

标签: wolfram-mathematica


【解决方案1】:

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)时,笔记本界面仅包含已知符号。

【讨论】:

  • 有趣。是否有任何实际情况可能需要从符号表中删除某些内容?
  • 一个常见的情况是在使用包含的函数之前忘记加载一个包——例如在调用Needs["JLink`"]之前评估JavaClassPath[]。如果随后调用必要的Needs,您最终会得到JLink`JavaClassPath 阴影Global`JavaClassPath,前端将两个符号都显示为红色。 Remove[Global`JavaClassPath] 解决了这个问题。
  • @WReach:这实际上解释并解决了我多年来一直想知道的问题。
  • @robmayoff 您可能会注意到,对于非 Mac 计算机,使用命令快捷方式 CTRL+k,这样做比使用菜单要快得多;)。
  • @Szabolcs 其实Removed 不是普通的头部,而是打印形式。一旦我们Removey,我们就会以一种微妙但永久的方式使x 失效——将y 重新引入会话将无济于事。 Remove 确实是一个相当特殊的破坏性操作,更多地旨在删除自动生成的符号。在一个相互连接的功能系统中(可能来自不同的包),因此Remove 只有在不依赖于被删除的符号时才是安全的。解决阴影是我所知道的Remove 的唯一主流(频繁、非高级)应用。
猜你喜欢
  • 2012-08-18
  • 2015-04-22
  • 2010-10-22
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多