Tcl 它如何解析If语句中括号内的空格
我知道Tcl中的if语句需要大括号而不是圆括号 但是,以下(错误)代码打印出“啊哈!”,因为Tcl似乎能够正确解释if条件:Tcl 它如何解析If语句中括号内的空格,tcl,parentheses,braces,Tcl,Parentheses,Braces,我知道Tcl中的if语句需要大括号而不是圆括号 但是,以下(错误)代码打印出“啊哈!”,因为Tcl似乎能够正确解释if条件: set flow_control 1 if ($flow_control==1) { puts "Aha!" } 然而,以下(带空格)与“表达式中的不平衡开参数”(1)不符 当然,使用大括号(带括号或不带括号)、带空格或不带空格均可: set flow_control 1 if {$flow_control == 1} { puts "Braces ru
set flow_control 1
if ($flow_control==1) {
puts "Aha!"
}
然而,以下(带空格)与“表达式中的不平衡开参数”(1)不符
当然,使用大括号(带括号或不带括号)、带空格或不带空格均可:
set flow_control 1
if {$flow_control == 1} {
puts "Braces rule!"
}
我的问题是,为什么第二个案例失败了
Donal Fellows对的回答清楚地解释了大括号和圆括号之间的区别,但我不明白为什么空格会导致第二个块失败。大括号是一种引用机制,将多个单词组合成一个单词。请参阅 请仔细注意命令的语法:
if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?
expr1
必须是一个单词
{$foo==$bar}
由于大括号的原因是一个单词
($flowcontrol==1)
没有大括号或双引号,因此它被解析为3个单独的单词。第一个单词的变量被展开,然后该单词作为expr1
被赋予,并且(1
不是有效的表达式
($flowcontrol==1)
不带空格是一个单词。展开变量,然后将(1==1)
(一个有效表达式)指定给if
if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?