#tcl
#tcl
Вопрос:
Ошибка: элемент списка в фигурных скобках, за которым следует «]]» вместо пробелов
Код:
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}]]
}
Комментарии:
1. Самые внешние фигурные скобки препятствуют замене переменных. Возможно, вы захотите
create_pattern -layers [list ...]
Ответ №1:
Проблема, с которой вы столкнулись, заключается в том, что вы заключили всю эту конструкцию списка в фигурные скобки, что превращает ее во что-то другое (что вам, вероятно, не нужно; анализатор буквального списка обрабатывает [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]]
Обратите внимание на использование обратной косой черты для цитирования всех новых строк. Они здесь важны.
Комментарии:
1. для m12 это работает, но если я хочу горизонтальный слой для m11. например, я хочу написать код: create_pattern -layers { [список [список {вертикальный слой: m12} [ширина списка: $ m12_width] [шаг списка: $ m12_pitch] {интервал: чередование} {обрезка: false } {выравнивание дорожки: track}]] [список [список {horizontal_layer: m11} [ширина списка: $ m11_width] [шаг списка: $ m11_pitch] {интервал: чередование} {обрезка: false } {выравнивание дорожки: track}]] }