TCL三元运算符不支持空字符串。

3
简单的问题,TCL给了我"表达式过早结束"的错误提示,因为三元表达式的最后一个参数是空字符串。如果它是其他任何值,那么它可以正常工作。我能在这里使用空字符串吗?
set y 5
set x [expr ($y > 1) ? 1 : ""]
1个回答

8

在传递参数时,应该将expr作为一个完整的表达式放在花括号中。这样做可以避免一系列问题,包括此问题。

expr {$y > 1 ? 1 : ""}

问题在于expr连接其参数以获得表达式。调用concat $y > 1 ? 1 : ""生成字符串"5 > 1 ? 1 : ",这个字符串无法被expr解析。

我永远无法完全理解TCL,但它是有效的 :-) - MikeKulls
3
@MikeKulls: 永远不要说永远。Tcl很难适应,因为它从来不试图聪明过人,不像其他一些语言。它只有少数几个固定的规则,并且这些规则始终适用。一旦你学会了毫不含糊地表达自己,你就能轻松应对Tcl,并且你会发现在其他语言中设计程序也更容易。 - Peter Lewerin
我必须说我觉得这很令人困惑。例如,今天我的代码出了问题 if { $x eq Tx } { doSomething }。在其他地方,字符串不需要引号,甚至文档中也说不要使用引号。 - MikeKulls
2
@MikeKulls:expr手册中提到:“请注意,所有不是数字或布尔值的字面常量都必须用花括号或双引号引起来。”(“operands”标题)。这种异常情况是必要的,因为最终(经过替换后)的输入字符串不是Tcl源代码,而是基于中缀表达式语言的字符串。 - Peter Lewerin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接