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