2015-02-23 93 views
0

我在過程中的tcl 8.4中創建一個字典。如何在另一個過程中使用構造的字典。我已經添加了如何在tcl 8.4中構建字典的示例代碼。我知道tcl 8.5已經內置了'dict'選項,但我必須使用tcl 8.4。有沒有辦法在TCL 8.4中創建一個字典全局變量8.4

proc a {} { 
    set test(key1) "value1" 
    set test(key2) "value2" 
    lappend keylist "key1" 
    lappend keylist "key2" 
    foreach key $keylist { 
      puts "value of $key is $test($key)" 
    } 
} 

所以上面提到的程序建立了一個字典。但是由於tcl 8.4解釋器將每一行「$ test($ key)」解釋爲一個單獨的變量,我怎樣才能使它成爲全局的,以便我可以在另一個過程中使用它。

+0

你真的應該升級到8.5或者如果你能8.6;即使對於安全性或構建修復程序,8.4也不再支持...... – 2015-02-23 21:25:04

回答

3

您可以使用global命令將變量或數組設置爲全局變量或數組。

例如:

proc a {} { 
    global test 
    set test(key1) "value1" 
    set test(key2) "value2" 
    lappend keylist "key1" 
    lappend keylist "key2" 
    foreach key $keylist { 
     puts "value of $key is $test($key)" 
    } 
} 

a 

# Outputs 
# value of key1 is value1 
# value of key2 is value2 

# Now use them in another proc... 
prob b {} { 
    global test 
    puts $test(key1) 
    puts $test(key2) 
} 

b 

# Outputs 
# value1 
# value2 
+0

這太棒了。我想爲我操縱一個全局變量,我應該首先在程序之外聲明它(更像C),這總是以錯誤結束。 – Ani 2015-02-23 21:08:08

+0

如果需要,您可以先執行程序之外的事情,但您仍然必須明確地將外部事物納入範圍。 (或者你可以使用完全限定的變量名稱,儘管它有多處使用的性能損失。) – 2015-02-23 21:23:26

0

如果你能夠返回字典,你可以將它傳遞給另一個proc作爲參數。 (本來希望將它放在註釋部分,但我沒有所需的代表)

+0

我不認爲它是可能的,因爲通過字典我們指的是鍵值對的集合。但是由於tcl 8.4沒有將結構視爲字典,它在返回時保留'value'部分,但不保存'key'部分(因爲它僅僅是變量)。通過這樣做,我們可以只返回一個值,集合也會丟失。 – Ani 2015-02-23 20:49:01

相關問題