2010-07-28 3 views
7

Каков правильный способ инициализации пустого массива в Tcl?Как инициализировать массив в Tcl?

У меня есть следующий код (упрощенный):

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

set r1 {} 
parseFile "filename" r1 

и я получаю ошибку:

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

ответ

4

Вы не инициализировать массивы в Tcl, они просто появляются, когда вы установите элемент :

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 

выходы:

two one 
+3

Если вы хотите заставить что-то быть массивом, я часто делаю так, как он делает код более читаемым, вы можете использовать 'array set r1 {}', а затем r1 - пустой массив. – Jackson

+0

@Jackson Обратите внимание, что 'array set r1 {}' не отменяет существующие значения. –

17

Для инициализации массива используйте «набор массивов». Если вы хотите просто создать внутренний объект массива, не давая ему никаких значений, вы можете дать ему пустой список в качестве аргумента. Например:

array set foo {} 

Если вы хотите, чтобы придать ему значения, вы можете дать ему правильно цитируемый список пар ключ/значение:

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

набор знаков (на английском языке) 80

набор array_name (key) value