写一个没有大括号的条件是否安全? e.g:
if [$step > 0] {
# …
}
或者我必须使用牙套吗? e.g:
if {[$step > 0]} {
# …
}
与带括号的线相比,没有括号的线条看起来可读 但是,我应该注意哪些缺点/警告?
答案 0 :(得分:1)
你需要大括号。此外,您不需要[]
。 []
将其内容作为命令进行计算,并将其自身替换为该命令的返回值。所以你的第一个版本
if [$step > 0] { }
假设$step
为3
,相当于
if [3 > 0] { }
尝试将[3 > 0]
评估为命令并抱怨3
不是命令。
您的第二个版本存在同样的问题,因为表达式会计算任何嵌入式命令替换。
你真正想要的只是
if {$step > 0} { ... }
要记住的是,在Tcl中,控制结构的行为与用户定义的函数相同(事实上,通常可以使用Tcl代码实现)。 if
命令采用2-4个参数,形式为"if" condition then-block [["else"] else-block]
。第一个参数始终是条件。第二个是当时的块。第三个是可选单词“else”,后面是第4个,它是一个可选的else块(如果存在“else”字,则需要else块)。
由于此构造采用简单参数,因此您需要确保提供参数。所以条件参数需要被支撑,以确保它是一个单独的参数(并且,以确保任何替换不会过早解释,因为条件的评估将为您解释它们)。类似地,then-block和else-block被支撑。