我正在寻找谷歌关于在期望中声明数组但无法找到它的信息。即行的link为空。
我知道我可以设置像set arr("hh") "hhh"
这样的数组值,但我如何声明它。
我可以使用一个命令打印整个数组,或者我必须遍历它以打印所有元素。
或者没有在expect / tcl.i中声明数组这样的事情意味着我们可以访问任何数组
只需使用global
关键字。
答案 0 :(得分:1)
您不要在Expect(或通常为Tcl)中声明数组,只需使用它们即可。
但是数组和其他变量确实有范围。如果你在一个过程中,并希望
引用具有全局范围的数组arr,您可以先说global arr
使用它或在每次使用时使用::前缀名称,例如。 set ::arr(hh) "hhh"; puts $::arr(hh)
。
有一个命令parray用于打印整个数组,但这是从库脚本加载而不是内置的,因此可能无法使用,具体取决于Expect安装的完成方式。例如
expect1.1> set arr(a) ACBD
ACBD
expect1.2> set arr(b) "BBB bbb"
BBB bbb
expect1.3> parray arr
arr(a) = ACBD
arr(b) = BBB bbb
答案 1 :(得分:1)
您不必声明数组,但如果您想:
array set variableName {}
最后一个字是一个空列表。如果您要将某些默认值存储在数组中,则可以说:
array set varname {key1 val1 key2 val2 ... ...}
如果您有点好奇,请点击parray
的实施方式:
proc parray {a {pattern *}} {
upvar 1 $a array
if {![array exists array]} {
error "\"$a\" isn't an array"
}
set maxl 0
set names [lsort [array names array $pattern]]
foreach name $names {
if {[string length $name] > $maxl} {
set maxl [string length $name]
}
}
set maxl [expr {$maxl + [string length $a] + 2}]
foreach name $names {
set nameString [format %s(%s) $a $name]
puts stdout [format "%-*s = %s" $maxl $nameString $array($name)]
}
}