如何在Tcl中初始化数组?

Ami*_*hum 7 arrays tcl

在Tcl中初始化空数组的正确方法是什么?

我有以下代码(简化):

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

set r1 {}
parseFile "filename" r1
Run Code Online (Sandbox Code Playgroud)

我收到错误:

错误:无法设置"结果(键)":变量不是数组

Bry*_*ley 22

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

array set foo {}
Run Code Online (Sandbox Code Playgroud)

如果要为其赋值,可以为其提供正确引用的键/值对列表:

array set foo {
    one {this is element 1}
    two {this is element 2}
}
Run Code Online (Sandbox Code Playgroud)


msw*_*msw 5

您无需在 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
Run Code Online (Sandbox Code Playgroud)

产量:

two one
Run Code Online (Sandbox Code Playgroud)

  • 如果你确实想强制某些东西成为数组,我经常这样做,因为它使代码更具可读性,你可以使用“array set r1 {}”,然后r1是一个空数组。 (3认同)