在 TCL 中来回传递字典值

Passing a dictionary value to and fro in TCL

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

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]"

我希望得到如下输出:

key1 1 key2 1

相反,我得到了:

key1 1

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

谢谢

testProc 更新字典的 copy。您可以 return 修改后的并保存它:

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]

或传递保存字典的变量的 name 并使用 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]