TCL三元运算符不喜欢空字符串

Mik*_*lls 2 tcl ternary-operator

简单的问题,TCL给了我"过早的表达结束",因为三元表达式的最后一个参数是一个空字符串.如果它是其他任何东西那么它的工作正常.我可以在这里使用空字符串吗?

set y 5
set x [expr ($y > 1) ? 1 : ""]
Run Code Online (Sandbox Code Playgroud)

Pet*_*rin 7

你应该总是给expr一个完整的表达式,用括号括起来作为参数.这避免了一大堆问题,包括这个问题.

expr {$y > 1 ? 1 : ""}
Run Code Online (Sandbox Code Playgroud)

问题是expr连接其参数以获取表达式.调用concat $y > 1 ? 1 : ""给出字符串"5> 1?1:",无法解析expr.

  • @MikeKulls:永远不要说永远.Tcl很难习惯,因为它不会像其他语言那样聪明.有一些硬性和快速的规则,它们总是适用.一旦你学会明确地表达自己,你将与Tcl相处得很好,你会发现用其他语言设计程序也更容易. (2认同)
  • @MikeKulls:expr 手册页说“请注意,所有不是数字或布尔值的文字操作数必须用大括号或双引号引用”(标题为“操作数”)。这个对通常 Tcl 语法的例外是必要的,因为最终(替换后)输入字符串不是 Tcl 源,而是基于中缀的表达式语言中的字符串。 (2认同)