2011-05-25 22 views
6

È possibile dichiarare una variabile statica in Tcl?
Uso una determinata funzione per rilevare errori di comando sconosciuti e desidero che stampi un messaggio di errore alla prima comparsa di un comando sconosciuto, quindi è necessario mantenere qualcosa come una lista statica all'interno di proc. È possibile?Variabile statica in Tcl

risposta

4

Oppure si può semplicemente utilizzare una scala variabile globale:

set varList {} 

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

useCount One 
useCount Two 
puts $varList 
2

No. Ma è possibile utilizzare una (di solito namespace) di matrice globale indicizzato per nome proc per esempio:

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

Aggiornamento: vedere anche http://wiki.tcl.tk/memoizing per un'idea generale – kostix

2

Tcl fa non supporta la variabile statica. Invece di utilizzare una variabile globale o una variabile all'interno di uno spazio dei nomi, un'altra alternativa è implementare la procedura come metodo all'interno di una classe (vedere [incr tcl] o snit). Se è necessario implementare variabile statica, il wiki Tcl ha una pagina che discutere di questo problema: http://wiki.tcl.tk/1532

0

Come non mi piace variabili globali (a meno che non si dispone di un piccolo script), che combinano soluzioni da @kostix e @Jackson:

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

foo::useCount One 
foo::useCount Two 

puts $foo::varList