2017-10-13 33 views
1

"trace add variable"コマンドを理解しようとしました。tclで "trace add variable read"を使用する

私は、変数が "書き込まれた"ときにコールバック関数を呼び出す必要があることを理解しています。

しかし、「読み取り」オプションの使用は何ですか?デバッグ用?

答えて

1

一つの例の使用は、グローバルカウンタのようになります。

proc init { } { 
    set ::globalcounter 0 
    trace add variable ::globalcounter read ::gcountUpdate 
} 

proc gcountUpdate { } { 
    incr ::globalcounter 
} 

proc main { } { 
    init 
    puts $::globalcounter 
    puts $::globalcounter 
} 
main 

私は他の用途があることを確認しています。あなたが指摘したように、デバッグ。
これは特定の手順による可変アクセスの実施に使用できます。

0

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 

私はローカル変数に変数のトレースを使用することはお勧めしません。グローバル/ネームスペース変数よりもオーバーヘッド(および内部の複雑さ)があります。

関連する問題