Lud*_*erl 7 syntax wolfram-mathematica
当我使用Manipulate时,我可以这样做:
Manipulate[x, {u, 1, 10}]
Run Code Online (Sandbox Code Playgroud)
实际上我的控件很复杂,所以我更喜欢将它们的定义从Manipulate表达式中取出,如下所示:
control = {u, 1, 10}
Manipulate[x, control]
Run Code Online (Sandbox Code Playgroud)
但这确实会导致错误:
Manipulate argument control does not have the correct form for a \
variable specification.
Run Code Online (Sandbox Code Playgroud)
为什么不这样做?
Sim*_*mon 11
Manipulate
有HoldAll
属性.你可以强制control
评估,一切正常
control = {u, 1, 10};
Manipulate[x[u], Evaluate[control]]
Run Code Online (Sandbox Code Playgroud)
这个问题是变量u
没有正确本地化,所以如果你已经设置了,例如u=1
某个地方,那么Manipulate
它将返回一个错误.
如果您使用适当的作用域结构可能会更好,例如,With
或者DynamicModule
取决于您正在尝试做什么.
这可能是矫枉过正,但它确保它u
是本地的并且control
在操作之外移动:
DynamicModule[{u}, With[{control = {u, 1, 10}}, Manipulate[x[u], control]]]
Run Code Online (Sandbox Code Playgroud)
acl*_*acl 10
这个
con = {u, 1, 10};
Manipulate[
u,
Evaluate@con
]
Run Code Online (Sandbox Code Playgroud)
确实有效.我想如果没有Evaluate
因为它就行不通
Attributes[Manipulate]
Run Code Online (Sandbox Code Playgroud)
显示Manipulate
具有属性HoldAll
(但我可能是错的).要查看此属性的效果,请尝试以下操作:
SetAttributes[f, HoldAll]
f[con]
f[Evaluate@con]
g[con]
(*
f[con]
f[{u, 1, 10}]
g[{u, 1, 10}]
*)
Run Code Online (Sandbox Code Playgroud)
因此,似乎由于HoldAll
属性,除非您明确地评估它,否则Manipulate
根本看不到"内部" con
.