2010-07-28 14 views
7

¿Cuál es la forma correcta de inicializar una matriz vacía en Tcl?¿Cómo inicializar una matriz en Tcl?

tengo el siguiente código (simplificado):

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

set r1 {} 
parseFile "filename" r1 

y me sale el error:

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

Respuesta

4

No inicializar matrices en Tcl, sólo aparecerá cuando establezca un miembro :

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 

rendimientos:

two one 
+3

Si desea forzar que algo sea una matriz, a menudo hago que haga que el código sea más legible, puede usar 'array set r1 {}' y luego r1 es una matriz vacía. – Jackson

+0

@Jackson Tenga en cuenta que 'array set r1 {}' no desarma los valores existentes. –

17

Para inicializar una matriz, use "conjunto de conjuntos". Si desea simplemente crear el objeto de matriz interno sin darle ningún valor, puede darle una lista vacía como argumento. Por ejemplo:

array set foo {} 

Si desea darle valores, puede darle una lista adecuadamente citado de pares clave/valor:

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

marcas de ajuste (España) 80

conjunto array_name (key) value

Cuestiones relacionadas