tcl错误:右大括号后出现额外字符

tcl错误:右大括号后出现额外字符,tcl,Tcl,尝试调试此“关闭大括号后的额外字符”错误时出现问题。错误消息指向我的进程行。。。我两天都看不见了 # {{{ MAIN PROGRAM proc MAIN_PROGRAM { INPUT_GDS_OASIS_FILE L CELL_LIST_FILE } { if { [file exists $CELL_LIST_FILE] == 0 } { set celllist [$L cells] } else { set

尝试调试此“关闭大括号后的额外字符”错误时出现问题。错误消息指向我的进程行。。。我两天都看不见了

# {{{ MAIN PROGRAM
proc MAIN_PROGRAM  { INPUT_GDS_OASIS_FILE  L   CELL_LIST_FILE        }     {

    if { [file exists $CELL_LIST_FILE] == 0 } {
        set celllist [$L cells]
    } else {
        set fp [open $CELL_LIST_FILE r]
        set file_data [read $fp]
        close $fp
        set celllist [split $file_data "\n"]
        set totalcells [expr [llength $celllist] - 1]
    }

    set counter 0
    foreach cell $celllist {
        set counter [expr {$counter + 1}]
        set value [string length $cell] 
        set value3 [regexp {\$} $cell]
        if { $value > 0 && $value2 == 0 && $value3 == 0 }  {
            #   EXTRACT BOUNDRARY SIZE FIRST
            puts "INFO -- READING Num : $counter/$totalcells -- $cell ..." 
            ONEIP_EXTRACT_BOUNDARY_SIZE $cell $L "IP_SIZE/$cell.txt" 
            exec gzip -f "IP_SIZE/$cell.txt"
        }
    }
    # }}}
}
# }}}

这似乎是一个在注释中使用大括号的不幸案例。Tcl解析器在注释()之前查看大括号。如果在注释中放置大括号会导致打开/关闭大括号的数量不匹配,则会出现问题


尝试使用不同的注释样式,并从您的注释中删除“{{{”和“}}}}}”。

在注释中使用大括号似乎是一种不幸的情况。Tcl解析器在注释()之前查看大括号。如果在注释中放置大括号会导致打开/关闭大括号的数量不匹配,则会出现问题


尝试使用不同的注释样式,并从您的注释中删除“{{{”和“}}}}}”。

我很确定这是由于程序体中注释中的大括号造成的。
维基页面有很好的解释。简言之,Tcl注释与大多数其他语言的注释不同,在注释中使用无可匹敌的大括号会导致所有问题 各种各样的问题


因此,在进程结束之前,
#}}
中的大括号可能是问题所在。

我很确定这是由于进程体中注释中的大括号造成的。
维基页面有很好的解释。简言之,Tcl注释与大多数其他语言的注释不同,在注释中使用无可匹敌的大括号会导致所有问题 各种各样的问题


因此,在进程结束之前,
#}}
中的大括号可能是问题所在。

Tcl要求过程体保持大括号平衡,即使在注释中也是如此

好吧,那完全是谎言。Tcl确实需要大括号引用的字符串是大括号平衡的(Tcl的大括号引用的字符串与bash中的单引号字符串类似,只是它们是嵌套的)。
proc
命令只是将其第三个参数解释为脚本(用于定义过程体),对于这种情况,使用大括号引用的字符串是非常常见的。这是Tcl通用语法的一个特性,也是为什么Tcl确实非常擅长处理DSL之类的事情的原因

您可以这样做:

proc brace-demo args "puts hi; # {{{"
brace-demo do it yeah
这很好。完全合法的Tcl,在程序体中有一条注释,带有不平衡的大括号。事实上,对于任何实际的过程来说,过早地输入所有必需的反斜杠来停止变量和命令替换的解释都是一个巨大的负担。为了简单起见,每个人都使用大括号,因此必须平衡它们


除了偶尔的注释之外,这几乎从来都不是一个问题。

Tcl要求程序主体保持平衡,即使在注释中也是如此

好吧,那完全是谎言。Tcl确实需要大括号引用的字符串是大括号平衡的(Tcl的大括号引用的字符串与bash中的单引号字符串类似,只是它们是嵌套的)。
proc
命令只是将其第三个参数解释为脚本(用于定义过程体),对于这种情况,使用大括号引用的字符串是非常常见的。这是Tcl通用语法的一个特性,也是为什么Tcl确实非常擅长处理DSL之类的事情的原因

您可以这样做:

proc brace-demo args "puts hi; # {{{"
brace-demo do it yeah
这很好。完全合法的Tcl,在程序体中有一条注释,带有不平衡的大括号。事实上,对于任何实际的过程来说,过早地输入所有必需的反斜杠来停止变量和命令替换的解释都是一个巨大的负担。为了简单起见,每个人都使用大括号,因此必须平衡它们


除了偶尔的评论之外,这几乎不是什么问题。

谢谢,我本以为这只是一个评论!!谢谢,我本以为这只是一个评论!!每天学习新的东西。。。我想我更喜欢每天学习新的东西。。。我想我更喜欢perl