有什么方法可以在Tcl命令中嵌入注释吗?

时间:2009-09-23 16:22:07

标签: comments tcl

我想在一个命令中有一个注释,看来这是不可能的,因为在Tcl 8.4中定义的'#'字符是:

如果哈希字符(“#”)出现在Tcl期望命令第一个字的第一个字符的位置,那么哈希字符及其后面的字符,直到下一个换行符,被视为评论并被忽略。注释字符只有在命令开头出现时才有意义。

想象一下这个如何运作的例子(这些评论在我的实验中都没有奏效):

array set myArray [list red 3        \
                        blue 4       ;# Blue is before purple.
                        purple 5     # Purple is after red.
                        green 7      \
                        yellow 8]

似乎棘手的部分是如何在嵌入注释的情况下继续list命令?也许类似C ++风格的/ * Embedded评论。 * /但我只看到#在Tcl中用于注释到行尾,没有用于开始和结束注释语法。

2 个答案:

答案 0 :(得分:6)

不,你不能在命令的调用中嵌入注释。 Tcl中的注释与其他语言中的注释完全不同。有些人偶然发现了这一点,大多数经验丰富的Tcl程序员都没有考虑过它。

您真正需要这样做的极少数情况下,您通常可以轻松地解决这个问题。使用您的示例:

set myArray(red) 3
set myArray(blue) 4 ;# Blue is before purple
set myArray(purple) 5 ;# Purple is after red
set myArray(green) 7
set myArray(yellow) 8

您可能认为这比在一条线上完成所有这一切要慢但除了最关键时间的情况之外,差异可以忽略不计,可能只有几微秒。

答案 1 :(得分:2)

Yes, there is a way to embed a comment into a command. It's not pretty, but it's possible. Add a command substitution containing only a comment to a list member, like this (the newline after the comment is mandatory):

array set myArray [list red 3     \
                        blue 4[
                                  # Blue is before purple.
                        ]         \
                        purple 5[
                                  # Purple is after red.
                        ]         \
                        green 7   \
                        yellow 8]
% array get myArray
yellow 8 purple 5 blue 4 green 7 red 3