Debugging 如果我忘记关闭打开的大括号';{';使用右大括号';}';
我对tcl没有太多的经验,但是当我今天写几个测试用例时,突然编译器不停地说缺少“}”,我必须通过至少50到60对括号来确保所有的测试都是正确的,在这个错误上花了大约1.5个小时之后,我发现我忘了用一个'}' 下面是我评论中的代码Debugging 如果我忘记关闭打开的大括号';{';使用右大括号';}';,debugging,tcl,Debugging,Tcl,我对tcl没有太多的经验,但是当我今天写几个测试用例时,突然编译器不停地说缺少“}”,我必须通过至少50到60对括号来确保所有的测试都是正确的,在这个错误上花了大约1.5个小时之后,我发现我忘了用一个'}' 下面是我评论中的代码 #test XmlDAOTest-1.15 {Test XmlDAO - method - 'ProcessCDATASectionNode'\ 因此,如果您看到的话,我已经对行进行了注释,并且我没有用“}”关闭它,因为注释不应该被编译和语法检查,只有在我在编译器给出
#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中的一个问题,您是否遇到过类似的问题。行末尾的“\”也是一个延续标记,因此它可能会将下一行拖到注释中 e、 g
将输出3,因为第2行被视为注释的一部分。您看到的问题是由于Tcl,而不是您的IDE。也就是说,这不是Tcl的“问题”,只是代码如何解析的一个工件。在Tcl中,has符号仅在启动命令有效的位置启动注释,因此,注释需要与代码的其余部分同时解析。因为代码没有经过“预处理”来删除注释,所以引号和大括号需要平衡 要举例说明为何以这种方式进行解析,请执行以下操作:
set x #abc
在上行中,x的值是#abc
。如果对注释进行预处理,上述内容将转换为仅setx
,其余内容将消失
同样的道理,还有另一个地方,很多人都会被评论咬到:
switch -exact -- $myvalue {
# this is not a comment
"a value" { do something }
"another value { do something }
}
在上述情况下,#
,为
,a为开关箱;你也可以这样看(这是一样的)
这是因为switch语句中查找大小写值的位置不是命令的有效位置。同样地,#
只是一个普通字符,与其他字符一样。哇,你是对的,但是在阅读了你的答案后,我尝试了同样的事情,没有使用延续标记,但仍然会给我一个错误。我只是输入了“#这是一个测试用例{”,如果我不使用“}关闭它,我仍然会得到同样的错误'也许你应该试一试。'是否有一个'}'应该关闭注释中没有注释的那一个?可能需要多看几行代码。这是事实,但是如果在一对外部大括号内,缺少}
仍然会导致问题(因为它们需要平衡以满足外部大括号计数处理规则的简单性)。我的经验法则是“永远保持牙套的平衡,即使你不需要。”哦!好啊由于我是一名新生,我唯一的经验是使用“C”和“CPP”,我不确定这是与TCL还是与编译器有关,因为如果编译器对我的代码感到疯狂,那就意味着我浪费了近90个小时的工作:-)许多IDE并不真正理解TCL真正的注释规则,因为它们与大多数语言都有细微的不同。那里也没有真正的变化前景……原因在Tcl维基中有描述:计算机语言!呵呵!,最近,我意识到我学习编程语言的方法是多么错误。尝试一些事情,遇到一些问题,试着找出问题的原因,然后来寻求帮助。在我看来,学习新语言还有更糟糕的方法
switch -exact -- $myvalue {
# this is not a comment
"a value" { do something }
"another value { do something }
}
switch -exact -- $myvalue {
"#" { this }
"is" { not }
"a" { comment }
"a value" { do something }
"another value" { do something }
}