Clear []和ClearAll []如何运作?清除[]无法清除两个不同的Manipulate []使用的变量

Ben*_*enB 4 wolfram-mathematica

我有两个不同的Mathematica笔记本,具有相似但不同的功能.当它们是唯一开放的笔记本时,两者都可以正常工作.尽管我(自由)使用Clear []来清除相关变量,但是当其他笔记本打开时,其中一个始终失败.

称之为GlobalManipulate

ClearAll["Global`*"]
Clear["Global`*"]
Definition[linear]
linear[x_] := a x;
quad[x_] := a x^2;
functionList := {linear, quad};
Manipulate[
  Plot[function[dummy], {dummy, -10, 10}], 
  {function, functionList}, {a, -10, 10},
  LocalizeVariables -> False, TrackedSymbols -> All
]
Run Code Online (Sandbox Code Playgroud)

称之为LocalManipulate

Clear["Global`*"]; 
Manipulate[
   {
      linear := a x; quad := a x^2; 
      linear, quad, function, 
      Plot[ReleaseHold@function, {x, -10, 10}]
   }, 
   {function, {HoldForm@linear, HoldForm@quad}}, 
   {a, -10, 10}, TrackedSymbols -> All
]
Run Code Online (Sandbox Code Playgroud)

当它自己运行时,GlobalManipulate按预期工作,我看到更新的图a更改.线性产生的定义Null.

当LocalManipulate打开,运行时,GlobalManipulate不再有效.即使它重新运行它的情节会出现一秒然后消失.

我使用Mathematica 8的本地副本和Mathematica 7的远程副本重现了这一点.

问题必须涉及功能linear[x_],quad[x_]因为

GlobalManipulatePrime:

ClearAll["Global`*"]
Clear["Global`*"]
Definition[linear]
linear1[x_] := a x;
quad1[x_] := a x^2;
functionList := {linear1, quad1};
Manipulate[
  Plot[function[dummy], {dummy, -10, 10}], 
  {function, functionList}, {a, -10, 10}, 
  LocalizeVariables -> False, TrackedSymbols -> All
]
Run Code Online (Sandbox Code Playgroud)

工作良好.

编辑添加粗体文本强调我正在重新运行Global,并且我试图弄清楚为什么函数仍然存在,尽管我的ClearAll [].

Sim*_*mon 5

LocalManipulate中,您有定义 linear := a x; quad := a x^2.由于这些未在Manipulate命令的控制器部分中声明,因此它们未本地化,因此会覆盖全局变量并破坏GlobalManipulate.

在a中本地化变量的最简单方法Manipulate是使用控制器类型添加它们None.下面,我已经修改了你的LocalManipulate代码,因此,最后一行使得linearquad局部的,特别是Manipulate(DynamicModule)

Manipulate[{linear := a x; quad := a x^2; linear, quad, function, 
  Plot[ReleaseHold@function, {x, -10, 10}]},
 {function, {HoldForm@linear, HoldForm@quad}}, {a, -10, 10}, 
 {linear, None}, {quad, None}, TrackedSymbols -> All]
Run Code Online (Sandbox Code Playgroud)