评论语法历史

时间:2012-12-31 02:46:56

标签: tcl

在早期的Tcl版本中,注释命令(#anything)是否与正常命令(已解析)完全相同,唯一的例外是参数未在任何地方发送?所以你可以这样做......

% # {
  comment
}

......但不是这样:

% # remember to initialize $width here
can't read "width": no such variable
% # a comment [with brackets] here
invalid command name "with"

在什么版本中它改变为完全忽略#字符到行尾之后的所有内容?

2 个答案:

答案 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

基本上是评估问题的顺序,在查看命令之前,大括号首先用于分组。