在早期的 Tcl 版本中,注释命令#anything
(所以你可以这样做...
% # {
comment
}
...但不是这个:
% # remember to initialize $width here
can't read "width": no such variable
% # a comment [with brackets] here
invalid command name "with"
它在哪个版本中更改为完全忽略 # 字符之后到行尾的所有内容?
在早期的 Tcl 版本中,注释命令#anything
(所以你可以这样做...
% # {
comment
}
...但不是这个:
% # remember to initialize $width here
can't read "width": no such variable
% # a comment [with brackets] here
invalid command name "with"
它在哪个版本中更改为完全忽略 # 字符之后到行尾的所有内容?
sourceforge 上最早发布的 Tcl 版本是2.1。从该 tarball 中的联机帮助页:
注释
如果命令中的第一个非空白字符是
#
,则从上到下#
一个换行符的所有内容都被视为注释并被忽略。
所以; 不,出于所有实际目的,注释一直是特殊语法,而不是常规的 tcl 命令。
编辑,重新评论一些评论(元评论?)
注释不是常规命令的原因之一是,当您不希望花括号匹配时,它为匹配花括号提供了一种简单的方法。假设您想编写一个打印单个右括号的 proc。
proc writeBrace {} {
puts "}"
}
不幸的是,大括号不再匹配,tcl 将其视为 proc 的主体puts "
,因为这就是左大括号和匹配的右大括号之间的内容。修复很简单:
proc writeBrace {} {
# match the brace below: {
puts "}"
}
现在,打开和关闭大括号的数量在 proc 主体中匹配。请记住,在tcl 尝试解析 proc 主体之前匹配大括号,在参数解析期间它只是一个字符串,而不是 tcl 代码。
规则并没有说明 # 之后的每个字符都被忽略,它比这更棘手。
Tcl'ers wiki 上的这个页面深入解释了注释语法的缺陷,所以我不会在这里重复所有这些: http ://wiki.tcl.tk/462
基本上它是一个评估问题的顺序,大括号首先用于分组,然后再查看命令。