如何使用三元运算符向tcl中的匿名字符串添加可选部分?

如何使用三元运算符向tcl中的匿名字符串添加可选部分?,tcl,Tcl,我是tcl的新手(如果答案显而易见,很抱歉,但是阅读教程和文档没有帮助)。我在tcl有一份声明说: startupitem.start "foo \tbar" 我想做的是让“foo”部分成为可选部分,这取决于 [variant_isset“alice”]使用三元运算符,不使用变量 我已经尝试了一些类似的方法 startupitem.start "[variant_isset """alice"""?"""foo\n\t""":""""""] bar" (当然有各种各样的转义和组合,或者在双引

我是tcl的新手(如果答案显而易见,很抱歉,但是阅读教程和文档没有帮助)。我在tcl有一份声明说:

startupitem.start "foo
\tbar"
我想做的是让“foo”部分成为可选部分,这取决于
[variant_isset“alice”]
使用三元运算符,不使用变量

我已经尝试了一些类似的方法

startupitem.start "[variant_isset """alice"""?"""foo\n\t""":""""""] bar"
(当然有各种各样的转义和组合,或者在双引号中使用双引号),但是我没有成功

如果
variant_isset
表达式返回true,则结果是它等价于

startupitem.start "bar" 

您想查看Tcl的命令,它引入了Tcl的表达式子语言,包括您所称的“三元”运算符

startupitem.start“[expr{[variant_isset“alice”]?“foo\n\t”:“}]bar”
如果您碰巧使用了Tcl,那么您可能希望使用outplace字符串组合,而不是inplace:

string cat [expr {[variant_isset "alice"] ? "foo\n\t" : ""}] "bar"

您可能更喜欢使用
if
命令(这在很大程度上是三元运算符的命令版本),其结果是它计算的主体脚本的结果。如果没有
else
子句,则如果未选择任何其他操作,则结果为空字符串:

startupitem.start "[if {[variant_isset alice]} {string cat "foo\n\t"}] bar"
或者您可以建立一个列表,然后
加入它:

set items {}
if {[variant_isset alice]} {
    lappend items "foo"
}
lappend items bar
startupitem.start [join $items "\n\t"]

当事情变得复杂时,第二种方法往往特别有效。

variant\u isset
计算为
true
时,字符串将包含
foo
。请。修正措辞或示例。