我想编写一个proc,它可以接受dict作为可选参数,或者如果没有给出则创建新的。然而,我的尝试失败了
参数说明符“dictionary [dict create]”中的字段太多
proc getOpts { {dictionary [dict create]} } {
upvar $dictionary dct
for { set i 0 } { $i < $::argc } { incr i } {
set key [lindex $::argv $i]
if { [string index $key 0] == "-" } {
incr i
dict set dct [string trimleft $key "-"] [lindex $::argv $i]
} else {
dict set dct $key ""
}
}
}
由于字典是纯值,我认为这可行。看起来我可能错了。不过,我想知道为什么它不起作用。
它不起作用的原因是参数变量列表是一个真正的列表,而不是命令评估上下文。这意味着 the[dict create]
被解析为两个单独的词,并且proc
不喜欢那样。幸运的是,dict create
没有其他参数的 a 只是表示空字符串的另一种方式:使用{}
或""
替代。
更大的问题是你正在使用它upvar
; 你可能不想这样做。正确的方法可能是不进行变量绑定,而只是从过程中返回字典:调用者可以将它保存在它自己的变量之一中,如果它愿意的话。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句