如何让 tcl switch return 成为一个常量值?

How to have tcl switch return a constant value?

如何获得 switch 到 return 的常数值?例如:

set z [switch a { 
    default {expr {{val}}} 
}]

这个人为的例子将 z 设置为 valexpr 是从开关 return 常量字符串的正确方法吗?这是很多大括号。有没有更好的方法?

一个更常见的 return 值的方法是使用设置命令:

set z [switch a { 
    default {set _z val} 
}]

对于常量表达式,这样使用expr一点也不错。否则,如果您使用的是 Tcl 8.6,那么您有 string cat,当与单个参数一起使用时,它将完美地工作。

set z [switch a {
    default {string cat "val"}
}]

在 8.6 之前(或 8.6 的非常早的小版本)您需要改用它:

set z [switch a {
    default {return -level 0 "val"}
}]

这实际上以正确的方式工作——它也是高效的字节码编译——但我​​一直觉得它很做作。


我倾向于将我的 set 放在我的 switch 中而不是相反,所以这个具体问题对我来说通常没有实际意义。但是,这里描述的技术对于 lmap 调用的主体非常有用。