1

好吧,我对 tcl 没有太多经验,但是当我今天突然写几个测试用例时,编译器一直说Missing '}' 我不得不经历至少 50 到 60 个大括号对以确保一切都是正确的,在这个错误上花了大约 1.5 小时后,发现我忘记用'}'结束我的评论真的很恼火, 所以以下是我评论中的代码

#test XmlDAOTest-1.15 {Test XmlDAO - method - 'ProcessCDATASectionNode'\

因此,如果您看到,我已经注释了该行并且我没有用'}'关闭它,因为不应该编译注释并检查语法,只有在我在'\'之后附加'}'之后编译器给出我的结果。我正在使用以下

IDE - Eclipse Indigo  Version of Tcl - Tcl/Tk 8.5 with tclOO  

Version: Indigo Service Release 2  Tcltest, tDom all included 

Build id: 20120216-1857

我想知道这是 IDE 方面的缺陷还是 TCL/Tk 固有的缺陷,如果它是 TCL 中的问题,您是否遇到过类似的问题。

4

2 回答 2

2

行尾的“\”也是一个继续标记,因此它可能会将下一行拉到注释中。

例如

#puts "1";\
puts "2";
puts "3";

将输出 3 因为第二行被视为注释的一部分。

于 2012-09-21T04:09:45.410 回答
1

您看到的问题是由于 Tcl,而不是您的 IDE。话虽如此,这不是 Tcl 的“问题”,只是如何解析代码的工件。在 Tcl 中,has 符号仅在可以有效启动命令的位置开始注释,因此,注释需要与其余代码同时解析。由于代码没有“预处理”以删除注释,因此需要平衡引号和大括号。

举例说明为什么以这种方式进行解析:

set x #abc

在上一行中,x 的值为#abc。如果对评论进行了预处理,则上述内容将转换为 just set x ,其余内容将消失。

沿着同样的思路,在另一个地方,许多人被评论所困扰:

switch -exact -- $myvalue {
    # this is not a comment
    "a value" { do something }
    "another value { do something }
}

上面的 , #,isa都是switch case;你也可以这样看(这是同一回事)

switch -exact -- $myvalue {
    "#" { this }
    "is" { not } 
    "a" { comment }
    "a value" { do something }
    "another value" { do something }
}

这样做的原因是 switch 语句的内部,它正在寻找 case 值,而不是命令的有效位置。因此,这#只是一个与其他任何字符相同的普通字符。

于 2012-09-23T04:01:24.150 回答