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.
我想知道如何定义一个将动态表达式作为参数的函数模式。例如,这里是一次尝试包装函数LocatorPane的动态变体:
SinLocatorPane[Dynamic[sinvalue_]] :=
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &],
Plot[Sin[x], {x, 0, 10}]]
用于动态表达式参数的正确模式是什么?在函数定义中使用动态参数是否有任何警告?
答案 0 :(得分:4)
如果您想编写一个更新某个变量值的函数,这就像通过引用传递一个变量一样。在Mathematica中实现此目标的标准方法是在函数上使用Hold*
属性。
SetAttributes[SinLocatorPane, HoldFirst];
SinLocatorPane[sinvalue_] :=
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &],
Plot[Sin[x], {x, 0, 10}]]
然后
{Dynamic[sv], SinLocatorPane[sv]}
将按预期工作。您的代码有效,因为Dynamic已归因HoldFirst
,这使您的代码可以更新变量sinvalue
。否则动态不是真的需要