Dynamic
Dynamic[expr]
expr の動的に更新された現在値を表示するオブジェクトを表す.Dynamic[expr]の表示形式がインタラクティブに変更されたり編集されたりする場合は,割当て expr=val は表示形式に対応する新しい値 val を expr に与えるように行われる.
Dynamic[expr,f]
val のインタラクティブな変更や編集の間,f[val,expr]を継続的に評価する.
Dynamic[expr,{f,fend}]
インタラクティブな変更や編集が終了してから fend[val,expr]も評価する.
Dynamic[expr,{fstart,f,fend}]
インタラクティブな変更や編集が開始してから fstart[val,expr]も評価する.
詳細とオプション
- Dynamic[expr]は直接表示される式として現れるだけではなく,例えばグラフィックスプリミティブあるいはスライダーのようなオブジェクトの座標として,またオプション設定としても現れることができる.
- インタラクティブな操作を通して expr に値を割り当てる際に使用されるときのDynamic[expr]中の式は,記号 x,オブジェクト x[i],部分e[[i]],あるいはリスト{x,y,…}であることが多い.
- 例えばグラフィックスでは,Point[Dynamic[{x,y}]]は x と y の現行値で与えられるために位置が動的に更新される点を表す.点がインタラクティブに移動されるたびに,{x,y}={valx,valy}の形の割当てが行われる.Point[Dynamic[{x,y}]]はインラタクティブに移動できる.Dynamic[Point[{x,y}]]はインタラクティブには移動できない.
- Dynamic[expr]は,値が必要になり,それが依存している記号の任意のタイプの値が変更されたと判断する場合はいつでも expr を評価する.
- RefreshあるいはClockオブジェクトがDynamic[expr]中の式の評価に現れると,expr は連続的に再評価される.
- Dynamicには属性HoldFirstがあるので,expr は表示のために値が必要となるまで評価されない.
- Dynamic[expr]はDynamic[expr,(expr=#)&]と等価である.
- Dynamic[expr,f]は,f[val,expr]の評価によるとき以外は,インタラクティブな操作が expr を変更しないようにする.
- Dynamic[expr,None]で表されるオブジェクトは,インタラクティブには変更できないが,何らかの理由で expr の値が変更されると変更される.
- Dynamic[expr,Temporary]では,表示されたオブジェクトの形式がインタラクティブな操作で変更できるが,操作が完了したときでなければ更新された値の expr への割当ては行われない.
- インタラクティブなマウス操作では,Dynamic[expr,{fstart,f,fend}]は一般に,マウスが押されると fstart[val,expr]を1度評価し,マウスが動かされるたびに f[val,expr]を評価し,マウスが放されると fend[val,expr]を1度評価する.
- マウスが動かされなければ,fstart,f,fend は厳密に1度ずつ評価される.
- f[val,expr]は常に,fstart[val,expr]の評価の直後に1度評価され,最後に評価されたときの val の値が,常に fend[val,expr]におけるものと同じになる.
- Dynamicオブジェクトに影響を与えるインタラクティブな操作には,グラフィックス内あるいはSlider等のオブジェクト内で要素をドラッグしたり,InputFieldのようなオブジェクト中のフィールドを編集したりすることが含まれる.
- fstart,f,fend の関数は次のものでもよい.
-
Automatic Setを使って値を割り当てる None アクションは取らない Temporary 一時的な変更のためにインタラクティブな操作を許す func func[val,expr]を評価する - Dynamic[expr,f]はDynamic[expr,{None,f,None}]と等価である.
- Dynamic[expr,Temporary]はDynamic[expr,{None,Temporary,Automatic}]と等価である.
- Dynamic[expr,f]は expr に割り当てられた値に制約条件を強制するために使うことができる.
- Dynamic[expr,f]は,expr が x+y のような式であるとき,個々の変数の割当てに使うことができる.
- 関数func[val,expr]は,exprに割当てを行う場合には,属性HoldRestを持っていなければならない.Function[{v,e},body,HoldRest]を使って,この属性を持たせることができる.
- 次のオプションを使うことができる.
-
BaseStyle {} 表示オブジェクトのベーススタイル指定 Deinitialization None Dynamicが表示不可になったときに評価する式 Evaluator Automatic 評価に使うカーネル Initialization None Dynamicが最初に表示されたときに評価する式 ShrinkingDelay 0. 表示オブジェクトが小さくなる場合の,縮めるまでの遅延時間 SynchronousUpdating True コンテンツを同期して評価するかどうか TrackedSymbols All その変更が更新を引き起す記号 UpdateInterval Infinity 更新を行う時間間隔 - Dynamic[e]は,StandardFormおよびTraditionalFormでは e の値を動的に更新した現行値として表示されるが,InputFormとOutputFormでは単にDynamic[e]として表示される.
- Dynamic[expr]は遅延的割当てに類似するものを提供する.この場合,値は式の評価によってではなく表示の必要性によって値が暗示的にリクエストされる.
例題
すべて開くすべて閉じるスコープ (24)
基本的なDynamic (6)
任意の式をDynamicで包み込むことができる:
DynamicはStandardFormでは見えないが,それでも存在している:
Dynamicを使い, に従って現在表示されている値とリンクする:
デフォルトで,Dynamic内の変数は局所化されない:
DynamicModuleを使って変数を局所化する:
Dynamicの式は自己誘発的なことがある:
Sliderとともに使う:
RandomRealやDateStringのような式は自動的には更新されない:
UpdateIntervalを使って動的更新を強制する:
Dynamicは引数をホールドにし,出力として表示されるまでは決して評価しない:
上記のDynamicは全く表示されなかったので,割当ては全く実行されなかった:
Dynamicを置く (3)
インタラクティブなDynamic (8)
オプション (8)
Evaluator (1)
"Local"という名前のカーネルでのみ実行されるDynamicを指定する:
Initialization (2)
ShrinkingDelay (1)
ShrinkingDelayを使って出力サイズを縮小する前に一定の経過時間を置く:
アプリケーション (5)
Triggerをコントロールにして,経過時間(分,秒)を記録するタイマーを作る:
特性と関係 (4)
Dynamicを使ってそのコンテンツを直接表示することができる:
単純に表示するDynamicにはインタラクティブ性はなく,第2引数は影響しない:
インタラクティブなコントロール,オブジェクト,あるいはオプションの値としてDynamicをフィードすることもできる:
値のスタイルのDynamicの値がインタラクティブに変更されると第2引数を呼び出される:
動的な式は,結果がスクリーンに表示されるまではコンテンツを評価しない:
時間が重要な場合はFinishDynamicを使う:
同期された動的要素はDynamicEvaluationTimeoutの値によっては時間的制約がある:
評価は$DynamicEvaluationを使って動的に評価されている場合は検知することができる:
テキスト
Wolfram Research (2007), Dynamic, Wolfram言語関数, https://reference.wolfram.com/language/ref/Dynamic.html.
CMS
Wolfram Language. 2007. "Dynamic." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Dynamic.html.
APA
Wolfram Language. (2007). Dynamic. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Dynamic.html