Tcl 注释语法历史记录

Tcl 注释语法历史记录,tcl,Tcl,在早期的Tcl版本中,comment命令(#anything)是否被完全视为正常命令(已解析),唯一的例外是参数没有发送到任何地方?所以你可以这样做 % # { comment } ……但不是这个: % # remember to initialize $width here can't read "width": no such variable % # a comment [with brackets] here invalid command name "with" 在哪个版本中,

在早期的Tcl版本中,comment命令(
#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版本是。从该tarball中的手册页:

评论 如果命令中的第一个非空字符是
#
,则 从
#
到下一个换行符被视为 一个评论被忽略了

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

编辑,是否有一些评论(元评论?)

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

proc writeBrace {} {
    puts "}"
}
不幸的是,大括号不再匹配,tcl看到,正如proc
的正文中所说的“
,因为这就是打开大括号和匹配的关闭大括号之间的区别。解决方法很简单:

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

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

规则没有规定忽略#之后的每个字符,这比这要复杂一点

Tcl'ers wiki上的这一页深入解释了注释语法的缺陷,因此我不会在这里重复所有这些:


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

我很确定我在注释中的括号出现了错误。大概在10-15年前的某个Mac OS版本的Tcl上。此后,我开始在注释中只使用普通字符。@potrzebie-我知道我遇到了错误我的公司一直使用Tcl 8.0.5(1999)。你不需要评论。只要使用
put“\}”
。在一个大括号中有4+1的东西有特殊的意义:
{
}
{
}
最后是行继续序列
\
,它在预传递中被解析,所以{}甚至看不到它(因此不能引用它).实际上,我认为规则其实很简单:在脚本中,注释命令中#之后直到换行符的每个字符都被忽略。棘手的部分是在脚本是(中的参数)的一部分时正确引用脚本更大的脚本。如果您习惯了其他语言的方式,则注释和大括号的交互方式是很棘手的。诀窍是,只有在搜索命令的第一个字母时,注释才会被检测为注释;否则,
是正常字符。