2011-04-18 7 views
6

Mathematica는 Dynamic을 인자로 처리 할 수있는 많은 함수를 제공합니다. I 하나는 인수로서 동적 표현식을 취하는 함수 패턴을 정의하는 방법에 대한 의문 가는지함수 인자로 동적 인

FileNameSetter[Dynamic[name]] 
uses the dynamically updated current value of name, with the 
value of name being reset if a different file is chosen. 

: 예를 들어, 함수 FileNameSetter에는 다음 변형이있다.

SinLocatorPane[Dynamic[sinvalue_]] := 
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &], 
      Plot[Sin[x], {x, 0, 10}]] 

동적 식 인수에 사용할 올바른 패턴은 무엇인가 예를 들어, 여기에 기능 LocatorPane의 동적 변형을 포장하기위한 하나 개의 시도는 무엇입니까? 함수 정의 안에 동적 인 인수를 사용하는 것에 대한 경고가 있습니까?

+3

나는 튜토리얼/AdvancedManipulateFunctionality의 'Custom Control Appearances'섹션이 적절하다고 생각한다. 또한이 튜토리얼의 맨 위에 언급 된 세 가지 전제 조건을 읽는 것을 잊지 마십시오. –

+0

튜토리얼에 대한 링크를 제공해 주셔서 감사합니다. – sakra

답변

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을 업데이트 할 수 있으므로 코드가 작동했습니다. 그렇지 않으면 동적이 정말로 필요하지 않다.