如何将 proc 参数的默认值设置为 Tcl 中的新字典

先生。一世

我想编写一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Tcl如何将参数传递给proc

如何将昨天的值设置为 datastage 中数字参数的默认值?

是否可以将参数的默认值设置为函数的返回值?(TCL)

如何将ActiveSheet,ActiveWorkbook或ThisWorkbook设置为VBA中可选参数的默认值?

在Lua中,如何将nil参数正确设置为某个默认值?

将默认参数发送为null并使用函数中设置的默认值

如何确定函数参数是自动设置为默认值还是在C ++中显式设置?

如何在javascript函数中为参数的特定默认值设置值

在Golang中执行json Unmarshal时,如何将默认值设置为映射值?

如何将通过tkinter中的循环创建的单选按钮值设置为默认值?

如果它们为空,如何在程序中设置日期输入参数的默认值?

如何在Javascript中为可选参数设置默认值?

如何在关键字中为可选列表参数设置默认值

如何在Scala中为varargs参数设置默认值?

如何在程序定义的架构中为参数设置默认值?

如何在Rails中为参数设置默认值?

如何将GridView中的列设置为默认值?

如何将datetimepicker中的默认值设置为上个月

如何将Microsoft SQL Server表中的默认值设置为昨天的日期

将proc设置为默认方法参数

如何更新字典列表中的值

如何僅更新字典中的值?

如何从TCL Proc返回列表?

在TCL线程中调用proc

如何更新字典数组中的字典值

将默认值设置为php中的组合框

将KeyValuePair中的Value设置为默认值

将timestampdiff()设置为MySQL中的默认值

将默认值设置为 Mysql 中的数字列