TCL在新行上使用elseif

Ger*_*alk 2 tcl

当语句块很短时,我喜欢在多行中构造if {} {} elseif {} {},如下所示。

if {cond1} {do1}
elseif {cond2} {do2}
elseif {cond3} {do3}
Run Code Online (Sandbox Code Playgroud)

但是TCL不允许我这样做。输入:无效的命令名称“ elseif”

当我将“ do”语句周围的花括号打开成多行时,它起作用了,但是看起来很丑。

if {cond1} {do1
} elseif {cond2} {do2
} elseif {cond3} {do3}
Run Code Online (Sandbox Code Playgroud)

TCL阻止if在if之后的下一行识别elseif的基本问题是什么?

谢谢,格特

Pet*_*rin 5

换行符终止当前命令。要使命令在下一行继续,必须对换行符进行转义或引用。

如果在换行符之前直接加一个反斜杠,则反斜杠,换行符以及按顺序跟随的所有制表符和空格将被单个空格字符代替。

if {cond1} {do1} \
elseif {cond2} {do2} \
elseif {cond3} {do3} \
else {do4}
Run Code Online (Sandbox Code Playgroud)

如果换行符在大括号内,则没有语法功能。它只是用括号括起来并传递给命令的字符串中的另一个字符。当您需要将包含多个命令的脚本传递给一个if命令时,这很有用:脚本将在命令中重新解释,并且这些换行符将在此处恢复其功能。

if {cond1} {do1
} elseif {cond2} {do2
} elseif {cond3} {do3
} else {do4}
Run Code Online (Sandbox Code Playgroud)

典型的Tcl风格是使用如下脚本参数编写命令:

if {cond1} {
    do1
} elseif {cond2} {
    do2
} elseif {cond3} {
    do3
} else {
    do4
}
Run Code Online (Sandbox Code Playgroud)

这种视觉风格并不符合每个人的喜好,但可以适应。

说明文件:Tcl