2011-05-25 10 views
6

Tclで静的変数を宣言できますか?
私は未知のコマンドエラーを捕まえるために特定の関数を使用しています。そして、私は未知のコマンドの最初の出現時にエラーメッセージを出力したいので、procの静的リストのように保つ必要があります。それは可能ですか?Tclの静的変数

答えて

4

それとも、ただまっすぐにグローバル変数を使用することができます

set varList {} 

proc useCount {value} { 
    global varList ; 
    lappend varList $value 
} 

useCount One 
useCount Two 
puts $varList 
2

号しかし、あなたは、例えばPROC名をインデックスとグローバル(通常は名前空間)のアレイを使用することができます

namespace eval foo { 
    variable statics 
    array set statics {} 
} 
... 
proc ::foo::bar args { 
    variable statics 
    upvar 0 statics([lindex [info level 0] 0]) myvar 
    # use myvar 
} 
+0

アップデート:一般的な考え方については、http://wiki.tcl.tk/memoizingも参照してください。 – kostix

2

Tclはありませんが静的変数をサポートしていません。グローバル変数または名前空間内の変数を使用する代わりに、クラス内のメソッドとしてプロシージャを実装することもできます([incr tcl]またはsnitを参照)。静的変数を実装する必要がある場合、Tcl Wikiにはこの問題について説明するページがあります。http://wiki.tcl.tk/1532

0

グローバル変数が嫌いです(小さなスクリプトがない限り)@kostixと@Jacksonのソリューションを組み合わせます:

namespace eval foo { 
    variable varList {} 
} 
proc foo::useCount {value} { 
    variable varList 
    lappend varList $value 
} 

foo::useCount One 
foo::useCount Two 

puts $foo::varList