在 TCL 中来回传递字典值

man*_*rma 0 dictionary procedure tcl

我正在尝试编写一个使用字典值来存储一些数据的脚本。然后,我将相同的字典值用于进一步处理的过程。它看起来像这样:

proc testProc {a} {
   some statements ...
   dict incr a key2 1
}

set dummy [dict create]
dict incr dummy key1 1
testProc $dummy 

puts "[dict get $dummy]"
Run Code Online (Sandbox Code Playgroud)

我期望得到的输出为:

键1 1 键2 1

相反,我得到了:

键1 1

如果我想要第一个输出,那么我应该怎么做。

谢谢

Sha*_*awn 5

testProc更新字典的副本。您可以返回修改后的并保存它:

proc testProc {a} {
    # some statements ...
    dict incr a key2 1
    return $a
}

set dummy [dict create]
dict incr dummy key1 1
set dummy [testProc $dummy]
puts [dict get $dummy]
Run Code Online (Sandbox Code Playgroud)

或传递保存字典的变量的名称upvar并使用(类似于dict incr等的工作方式):

proc testProc {aDict} {
    upvar $aDict a
    # some statements ...
    dict incr a key2 1
}

set dummy [dict create]
dict incr dummy key1 1
testProc dummy
puts [dict get $dummy]
Run Code Online (Sandbox Code Playgroud)