2013-03-08 138 views
0

我looing的信息,谷歌有关声明数组预期,但无法找到it.even的witki link的线是空的。 我知道我可以设置数组值一样set arr("hh") "hhh"但我怎么申报。如何声明一个特定的变量是一个数组?

和我可以打印使用一个命令整个阵列或我一定要通过它循环打印所有的元素。

或者没有在expect/tcl.i中声明数组这样的事情,那么我们是否可以通过使用global关键字来访问任何数组 。

回答

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)] 
    } 
} 
1

在期待(或TCL在一般)你不声明数组,你只需要使用它们。 但是数组和其他变量确实有范围。如果你是在一个proc和希望 指的是具有全局范围,你可以用它说global arr 之前或::你使用它,例如每一次的前缀名称的数组ARR。 set ::arr(hh) "hhh"; puts $::arr(hh)

有一个命令粒子阵列打印整个数组,但是这是从库脚本加载,而不是内置的,所以这取决于你如何安装期待已做可能无法使用。例如。

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 
相关问题