1

在早期的 Tcl 版本中,注释命令#anything(所以你可以这样做...

% # {
  comment
}

...但不是这个:

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

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

4

2 回答 2

2

sourceforge 上最早发布的 Tcl 版本是2.1。从该 tarball 中的联机帮助页:

注释

如果命令中的第一个非空白字符是#,则从上到下#一个换行符的所有内容都被视为注释并被忽略。

所以; 不,出于所有实际目的,注释一直是特殊语法,而不是常规的 tcl 命令。

编辑,重新评论一些评论(元评论?)

注释不是常规命令的原因之一是,当您希望花括号匹配时,它为匹配花括号提供了一种简单的方法。假设您想编写一个打印单个右括号的 proc。

proc writeBrace {} {
    puts "}"
}

不幸的是,大括号不再匹配,tcl 将其视为 proc 的主体puts ",因为这就是左大括号和匹配的右大括号之间的内容。修复很简单:

proc writeBrace {} {
    # match the brace below: {
    puts "}"
}

现在,打开和关闭大括号的数量在 proc 主体中匹配。请记住,在tcl 尝试解析 proc 主体之前匹配大括号,在参数解析期间它只是一个字符串,而不是 tcl 代码。

于 2012-12-31T03:11:56.390 回答
0

规则并没有说明 # 之后的每个字符都被忽略,它比这更棘手。

Tcl'ers wiki 上的这个页面深入解释了注释语法的缺陷,所以我不会在这里重复所有这些: http ://wiki.tcl.tk/462

基本上它是一个评估问题的顺序,大括号首先用于分组,然后再查看命令。

于 2012-12-31T04:10:23.847 回答