2011-05-25 4 views
6

Est-il possible de déclarer une variable statique dans Tcl?
J'utilise une certaine fonction pour attraper les erreurs de commande inconnues, et je veux qu'il imprime un message d'erreur sur la première apparition d'une commande inconnue - donc je dois garder quelque chose comme une liste statique à l'intérieur du proc. Est-ce possible?Variable statique dans Tcl

Répondre

4

Ou vous pouvez simplement utiliser une variable globale droite:

set varList {} 

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

useCount One 
useCount Two 
puts $varList 
2

Non, mais vous pouvez utiliser un global tableau (généralement des espaces de noms) indexé par le nom de proc par exemple:

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

Mise à jour: voir aussi http://wiki.tcl.tk/memoizing pour une idée générale – kostix

2

Tcl ne ne supporte pas la variable statique. Au lieu d'utiliser une variable globale ou une variable à l'intérieur d'un espace de noms, vous pouvez également implémenter votre procédure en tant que méthode dans une classe (voir [incr tcl] ou snit). Si vous devez implémenter variable statique, le wiki Tcl a une page qui traitent de cette question: http://wiki.tcl.tk/1532

0

Comme je n'aime pas les variables globales (sauf si vous avez un petit script), je combiner des solutions de @kostix et @Jackson:

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

foo::useCount One 
foo::useCount Two 

puts $foo::varList