在条件中使用大括号

时间:2013-11-26 18:02:08

标签: tcl

写一个没有大括号的条件是否安全? e.g:

if [$step > 0] {
# …
}

或者我必须使用牙套吗? e.g:

if {[$step > 0]} {
# …
}

与带括号的线相比,没有括号的线条看起来可读 但是,我应该注意哪些缺点/警告?

1 个答案:

答案 0 :(得分:1)

你需要大括号。此外,您不需要[][]将其内容作为命令进行计算,并将其自身替换为该命令的返回值。所以你的第一个版本

if [$step > 0] { }

假设$step3,相当于

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被支撑。

相关问题