2010-07-28 19 views
7

Qual è il modo corretto per inizializzare una matrice vuota in Tcl?Come inizializzare un array in Tcl?

Ho il seguente codice (semplificato):

proc parseFile {filename results_array} { 
    upvar $results_array results 
    set results(key) $value 
} 

set r1 {} 
parseFile "filename" r1 

e ottengo l'errore:

Error: can't set "results(key)": variable isn't array

risposta

4

Non inizializzare le matrici in Tcl, che appaiono solo quando si imposta un membro :

proc stash {key array_name value} { 
    upvar $array_name a 
    set a($key) $value 
} 

stash one pvr 1 
stash two pvr 2 
array names pvr 

rendimenti:

two one 
+3

Se si desidera forzare qualcosa per essere un array, faccio spesso mentre rende il codice più leggibile, è possibile utilizzare 'array set r1 {}' e quindi r1 è un array vuoto. – Jackson

+0

@Jackson Si noti che 'array set r1 {}' non annulla i valori esistenti. –

17

Per inizializzare un array, utilizzare "set di array". Se vuoi semplicemente creare l'oggetto array interno senza dargli alcun valore puoi dargli una lista vuota come argomento. Per esempio:

array set foo {} 

Se si vuole dare valori, si può dare una lista correttamente citata di coppie chiave/valore:

array set foo { 
    one {this is element 1} 
    two {this is element 2} 
} 
0

segni set (inglese) 80

set array_name (chiave) valore

Problemi correlati