"trace add variable"コマンドを理解しようとしました。tclで "trace add variable read"を使用する
私は、変数が "書き込まれた"ときにコールバック関数を呼び出す必要があることを理解しています。
しかし、「読み取り」オプションの使用は何ですか?デバッグ用?
"trace add variable"コマンドを理解しようとしました。tclで "trace add variable read"を使用する
私は、変数が "書き込まれた"ときにコールバック関数を呼び出す必要があることを理解しています。
しかし、「読み取り」オプションの使用は何ですか?デバッグ用?
一つの例の使用は、グローバルカウンタのようになります。
proc init { } {
set ::globalcounter 0
trace add variable ::globalcounter read ::gcountUpdate
}
proc gcountUpdate { } {
incr ::globalcounter
}
proc main { } {
init
puts $::globalcounter
puts $::globalcounter
}
main
私は他の用途があることを確認しています。あなたが指摘したように、デバッグ。
これは特定の手順による可変アクセスの実施に使用できます。
Tcl変数をC変数にリンクするのは、リードコールバックの用途の1つです(実際には書き込みコールバックよりも多少一般的です)。読み込みコールバックを使用してC変数の読み込みを行い、Tcl変数をその変数に同期させます。 (書き込みコールバックは、Tcl変数の更新がC変数に反映されるようにします)。このメカニズムを使用するTclはa built-in C APIを持っていますが、その上に構築されたTcl APIではなく変数トレースに基底のC APIを使用しています。それ。
また、明らかに、読み取り専用の変数を作るために、読み取りコールバックを使用することができます。
trace add variable foo read {apply {args {
upvar "#0" foo v
set v "definitely this"
}}}
puts $foo
set foo "that"
puts $foo
私はローカル変数に変数のトレースを使用することはお勧めしません。グローバル/ネームスペース変数よりもオーバーヘッド(および内部の複雑さ)があります。