【问题标题】:Dynamic as a function argument动态作为函数参数
【发布时间】:2011-08-08 02:15:36
【问题描述】:

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

用于动态表达式参数的正确模式是什么?在函数定义中使用动态参数有什么注意事项吗?

【问题讨论】:

  • 我认为教程/AdvancedManipulateFunctionality 的“自定义控件外观”部分是相关的。不要忘记阅读该教程顶部提到的三个先决条件。
  • 感谢您提供教程链接。

标签: wolfram-mathematica


【解决方案1】:

如果你想写一个函数来更新某个变量的值,这就像通过引用传递一个变量。在 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。否则动态并不是真正需要的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多