2011-04-18 64 views
6

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}]] 

什么是用于动态表达论点正确的模式?有没有在函数定义中使用动态参数的警告?

+3

我认为教程/ AdvancedManipulateFunctionality的'自定义控件外观'部分将是相关的。不要忘记阅读本教程顶部提到的三个先决条件。 – 2011-04-18 19:07:09

+0

感谢您提供指南的链接。 – sakra 2011-04-19 11:10:41

回答

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]} 

将作为您的预期。你的代码工作,因为动态有HoldFirst归因于此,并允许您的代码更新变量sinvalue。否则动态不是真的需要