2010-07-28 162 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 2010-07-28 07:38:03

+0

@Jackson请注意,'array set r1 {}'不会取消设置现有的值。 – 2010-07-28 14:49:47

17

要初始化数组,请使用“数组集”。如果你只想创建内部数组对象而不给它任何值,你可以给它一个空列表作为参数。例如:

array set foo {} 

如果你想给它的值,你可以给它的键/值对的正确引用列表:

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

的标记集(英文)80

集array_name(key)value