2013-03-08 137 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 
相關問題