Tcl:大括号中列出元素,后跟“]]”而不是空格

问题描述

错误:大括号中的listelement后跟“]]”而不是空格

代码

create_pattern  -layers  { [list [list {vertical_layer: m12} [list width: $m12_width] [list pitch: $m12_pitch] {spacing: interleaving}  {trim: false } {track_alignment: track}]] 
[list [list {vertical_layer: m11} [list width: $m11_width] [list pitch: $m11_pitch] {spacing: interleaving}  {trim: false } {track_alignment: track}]] 
}

解决方法

您遇到的问题是,您将所有列表构造都用大括号括起来,这将其转换为其他内容(您可能不想要;文字列表解析器将[list视为实际列表中的单词,并被}]]弄糊涂,因为它是故意愚蠢的代码,因此它也是可预测的代码)。正在进行的嵌套数量非常令人困惑,而且显然是出乎意料的。

我猜您最好通过一个帮助程序来生成组件结构,然后再使用它:

proc LayerDescriptor {id width pitch} {
    # I'm not sure that this is right,but it would be a lot less surprising than a list of lists of lists of things
    return [list \
        [list vertical_layer: $id] \
        [list width: $width] \
        [list pitch: $pitch] \
        {spacing: interleaving} \
        {trim: false } \
        {track_alignment: track}]
}

create_pattern -layers [list \
    [LayerDescriptor "m12" $m12_width $m12_pitch] \
    [LayerDescriptor "m11" $m11_width $m11_pitch]]

请注意使用反斜杠来引用所有换行符。它们在这里很重要。