2010-07-28 15 views
7

Was ist der richtige Weg, um ein leeres Array in Tcl zu initialisieren?Wie initialisiert man ein Array in Tcl?

Ich habe den folgenden Code (vereinfacht):

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

set r1 {} 
parseFile "filename" r1 

und ich bekomme die Fehlermeldung:

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

Antwort

4

Sie initialisieren nicht Arrays in Tcl, sie nur angezeigt, wenn Sie ein Element gesetzt :

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 

ergibt:

two one 
+3

Wenn Sie etwas zu einem Array erzwingen wollen, tue ich es oft, da es den Code lesbarer macht. Sie können 'array set r1 {}' verwenden und r1 ist ein leeres Array. – Jackson

+0

@Jackson Beachten Sie, dass 'array set r1 {}' vorhandene Werte nicht löscht. –

17

Um ein Array zu initialisieren, verwenden Sie "Array-Set". Wenn Sie nur das interne Array-Objekt erstellen möchten, ohne ihm Werte zu geben, können Sie ihm eine leere Liste als Argument geben. Zum Beispiel:

array set foo {} 

Wenn Sie es Werte geben möchten, können Sie es eine richtig zitierte Liste von Schlüssel/Wert-Paare geben kann:

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

set marks (Englisch) 80

Set array_name (Schlüssel) Wert

Verwandte Themen