【问题标题】:Why Does TCL Give me an Error if I forget to close an open brace '{ ' using a closing brace '}'如果我忘记使用右大括号'}'关闭左大括号'{',为什么TCL会给我一个错误
【发布时间】:2012-09-21 04:01:57
【问题描述】:

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

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

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

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 中的问题,您是否遇到过类似的问题。

【问题讨论】:

标签: debugging tcl


【解决方案1】:

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

例如

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

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

【讨论】:

  • 哇,你是对的,但在阅读了你的答案后,我尝试了同样的事情,但没有继续标记,它仍然给我一个错误。我只是输入了'#this is a test case {'并且仍然如果我不用'}'关闭它,我会得到同样的错误也许你应该试一试..
  • 是否有一个 '}' 应该关闭评论中没有评论的那个?可能需要再看几行代码。
  • 这是对的,但如果在外括号内,缺少}仍然导致问题(因为它们需要平衡以满足外括号简单的大括号计数处理规则)。我的经验法则是“始终平衡牙套,即使您不必这样做”。
  • 哦!好的.. 由于我是一个新人,我唯一的经验是使用 'C' 和 'CPP' ,我不确定它是否与 TCL 或编译器有关,因为如果编译器对我的代码感到疯狂那么这意味着我浪费了将近 90 个小时的工作:-)
【解决方案2】:

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

举个例子说明为什么要这样解析:

set x #abc

在上述行中,x 的值为#abc。如果对 cme​​ts 进行了预处理,则上述内容将仅转换为 set x ,其余部分将消失。

同样的道理,还有很多人被 cmets 咬过的另一个地方:

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 值)不是命令的有效位置。因此,# 只是一个与其他字符相同的普通字符。

【讨论】:

  • 计算机语言!呵呵!,最近我意识到我学习编程语言的方法是多么错误。
  • 尝试事物,遇到问题,尝试找出问题的原因,然后来寻求帮助。在我看来,学习新语言还有更糟糕的方法。 :)
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多