TCL - Return 过程中的字典
TCL - Return Dictionaries within procedures
我想创建几个处理字典的程序,例如:
->推送
->流行
-> 打印
等
我创建了一个“creates/sets 字典值”的过程。
从用户的角度来看,他们会这样做:
push myDict1 key value
push myDict2 key value
这将创建两个具有给定键和值的不同字典。
现在,我希望程序 return 字典的变量,这样用户可以这样做:
puts $myDict1 or puts $myDict2
会显示内容。
如果我这样做:
proc push {dictName key value } {
return [dict set $dictName $key $value]
}
它将 return 表达式的值,但我希望它写入某种全局变量,其名称为 myDict1 或 myDict2,由用户在调用过程时指定。
我试过同时使用“变量”和“upvar”但没有成功。
如有任何帮助,我们将不胜感激。提前致谢。
干杯,
佩德罗
学习使用 upvar
可能很棘手,您可能使用不正确。
proc push {dictName key value} {
upvar $dictName local_dict
# Any change to 'local_dict' will affect the $dictName variable
# in the scope that called the proc.
dict set local_dict $key $value
return $local_dict
}
set myDict1 [dict create]
push myDict1 key1 value1
puts $myDict1 --> 'key1 value1'
(从我原来的回答中删除了一个不正确的评论)
我想创建几个处理字典的程序,例如:
->推送
->流行
-> 打印
等
我创建了一个“creates/sets 字典值”的过程。
从用户的角度来看,他们会这样做:
push myDict1 key value
push myDict2 key value
这将创建两个具有给定键和值的不同字典。
现在,我希望程序 return 字典的变量,这样用户可以这样做:
puts $myDict1 or puts $myDict2
会显示内容。
如果我这样做:
proc push {dictName key value } {
return [dict set $dictName $key $value]
}
它将 return 表达式的值,但我希望它写入某种全局变量,其名称为 myDict1 或 myDict2,由用户在调用过程时指定。
我试过同时使用“变量”和“upvar”但没有成功。
如有任何帮助,我们将不胜感激。提前致谢。
干杯,
佩德罗
学习使用 upvar
可能很棘手,您可能使用不正确。
proc push {dictName key value} {
upvar $dictName local_dict
# Any change to 'local_dict' will affect the $dictName variable
# in the scope that called the proc.
dict set local_dict $key $value
return $local_dict
}
set myDict1 [dict create]
push myDict1 key1 value1
puts $myDict1 --> 'key1 value1'
(从我原来的回答中删除了一个不正确的评论)