sak*_*kra 6 wolfram-mathematica
Mathematica提供了许多能够Dynamic作为参数处理的函数.例如,函数FileNameSetter具有以下变体:
FileNameSetter[Dynamic[name]]
uses the dynamically updated current value of name, with the
value of name being reset if a different file is chosen.
Run Code Online (Sandbox Code Playgroud)
我想知道如何定义一个以动态表达式作为参数的函数模式.例如,这里是一次尝试包装LocatorPane函数的动态变量:
SinLocatorPane[Dynamic[sinvalue_]] :=
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &],
Plot[Sin[x], {x, 0, 10}]]
Run Code Online (Sandbox Code Playgroud)
用于动态表达式参数的正确模式是什么?在函数定义中使用动态参数是否有任何警告?
如果您想编写一个函数来更新某个变量的值,这就像通过引用传递变量一样。Hold*在 Mathematica 中实现此目的的标准方法是在函数上使用属性。
SetAttributes[SinLocatorPane, HoldFirst];
SinLocatorPane[sinvalue_] :=
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &],
Plot[Sin[x], {x, 0, 10}]]
Run Code Online (Sandbox Code Playgroud)
然后
{Dynamic[sv], SinLocatorPane[sv]}
Run Code Online (Sandbox Code Playgroud)
会按你的预期工作。您的代码有效,因为 Dynamic 已HoldFirst归因,这允许您的代码更新 variable sinvalue。否则,动态并不是真正需要的