尝试在Tcl中使用keylset和keylget

尝试在Tcl中使用keylset和keylget,tcl,Tcl,当我使用像这样的tcl代码时,它工作得很好 keylset mylist LastName Hello FirstName World puts [keylget mylist LastName] puts [keylget mylist FirstName] 输出: 你好 世界 现在,如果我想将这些键和值对存储在一个变量中,然后运行它,我会得到一个错误 set mylist2 {LastName Hello FirstName World} keylset mylist $mylist2 p

当我使用像这样的tcl代码时,它工作得很好

keylset mylist LastName Hello FirstName World
puts [keylget mylist LastName]
puts [keylget mylist FirstName]
输出: 你好 世界

现在,如果我想将这些键和值对存储在一个变量中,然后运行它,我会得到一个错误

set mylist2 {LastName Hello FirstName World}
keylset mylist $mylist2
puts [keylget mylist LastName]

我遇到一个错误-我知道我对keylset使用了错误的参数,但我不知道还能做什么。

我的第一个建议是将参数列表扩展到
keylset
,因为它都可以与直接参数一起工作:

keylset mylist {*}$mylist2

(在Tcl的古老版本中,您可以使用
eval-keylset-mylist$mylist2
,但不建议使用,因为它有潜在的评估危险,而非危险版本,
eval[linsert$mylist2 0 keylset-mylist]
,真是太可怕了。这是一个从8.4到8.5的巨大语言变化,基本上使
eval
一夜之间几乎过时。)

我的第一个建议是将参数列表扩展到
keylset
,因为它都可以与直接参数一起工作:

keylset mylist {*}$mylist2

(在Tcl的古老版本中,您可以使用
eval-keylset-mylist$mylist2
,但不建议使用,因为它有潜在的评估危险,而非危险版本,
eval[linsert$mylist2 0 keylset-mylist]
,非常可怕。这是一次从8.4到8.5的语言大变革,基本上使
eval
在一夜之间几乎过时。)

对于那些在家玩的人来说,这两个有问题的命令是TclX包的一部分,而不是在基本Tcl中。对于那些在家玩的人来说,这两个有问题的命令是TclX包的一部分,并且不在基本Tcl中。