当我使用 Manipulate 时,我可以这样做:
Manipulate[x, {u, 1, 10}]
实际上我的控件又多又复杂,所以我更愿意采用它们 Manipulate 表达式的定义,如下所示:
control = {u, 1, 10}
Manipulate[x, control]
但这确实会导致错误:
Manipulate argument control does not have the correct form for a \
variable specification.
为什么它不这样工作?
最佳答案
Manipulate
具有 HoldAll
attribute 。您可以强制 control
进行评估,一切正常
control = {u, 1, 10};
Manipulate[x[u], Evaluate[control]]
这样做的问题是变量 u
没有正确本地化,所以如果您已经在某处设置了,例如 u=1
,那么 Manipulate
将返回错误。
如果您使用适当的作用域结构(例如 With
或 DynamicModule
),这可能会更好,具体取决于您想要执行的操作。
这可能有点过头了,但它确保了 u
是本地的,并将 control
移动到操作之外:
DynamicModule[{u}, With[{control = {u, 1, 10}}, Manipulate[x[u], control]]]
关于syntax - 在 Mathematica 中将控制定义为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7138827/