在Tclers wiki页面,'Dodeklogue'提到了评论:
评论: 如果#出现在预期命令的位置,则该行的其余部分是注释。没有尝试执行命令,也没有执行任何字符 解释行,但终止换行符可能是 转义为\,表示评论继续在 后续行。
但是,评论似乎是由终端\
解释的:例如,让文件test.tcl的内容如下:
proc test {} {
# Open brace {
puts "I am fine"
}
test
吨
然后
tclsh test.tcl
给出以下错误消息:
missing close-brace: possible unbalanced brace in comment
while executing
"proc test {} {"
(file "hello.tcl" line 1)
Even more interesting
更有趣的是,当用括号{
替换左括号}
时,错误信息完全不同。
为什么Tcl解释器试图理解注释中的内容,如果Tcl解释器(或任何一般的解释器)被设计为将注释作为真实注释,我们会失去什么:一旦看到{{1}完全忽略直到换行(除了检查注释的最后一个字符,如果它是#
)?
答案 0 :(得分:5)
与许多其他语言不同,Tcl与其余语法同时处理注释。这意味着,因为它首先遇到{
(作为proc
命令调用的一部分),所以它专注于匹配大括号。它只是在{em>评估过程时将#
理解为注释(即,您调用proc
命令定义的命令)。
这些将作为评论:
proc commentDemonstration {} {
puts "A"
# if [exit] {
puts "B"
# } else [exit]
puts "C"
}
# Call it and see, _no_ early exit
commentDemonstration
他们是真正的评论。只是你必须在程序定义中平衡(或反斜杠引用)大括号(除非你疯狂到足以在双引号或其他内容中定义程序体; don&# 39;为了你自己的理智而这样做 ,与你使用的评论无关。大多数时候你没有注意到平衡要求,但这是重要的一个案例。
能够将#
放在这样的东西中是将其他语言嵌入到Tcl中的关键。例如,Critcl允许C源代码嵌入在Tcl中,#
表示C中完全不同的东西。