#arrays #switch-statement #tcl
Вопрос:
Разрешено ли использовать элемент массива с помощью оператора tcl switch? У меня есть массив с именем
set name "pad" set p_list("pad") "IO2"
и теперь пытаюсь сделать некоторые условные вещи на основе этого массива, такие как
% switch $p_list($net_name) { IO1 { puts "io1" } IO2 { puts "io2" } default { puts "default" } }
но, похоже, массив не может быть передан коммутатору, и, следовательно, ошибка со следующей ошибкой не может прочитать «pads_list(pad)»: такого элемента в массиве нет
Не мог бы кто-нибудь, пожалуйста, подсказать, разрешено это или нет. Если разрешено, то как я могу заставить это работать?
Комментарии:
1. Ваш элемент массива является
"pad"
, нетpad
…
Ответ №1:
Двойные кавычки не являются особенными в Tcl, если они не находятся в начале или конце слова. Tcl не является Python или C. Это означает , что вы создали элемент массива с именем "pad"
, включая двойные кавычки. Это законно, но довольно необычно для приложения, которое вы пишете. ( switch
То, что вы написали, выглядит абсолютно нормально.) Либо вы должны написать:
set p_list(pad) "IO2"
или:
set net_name ""pad""
Я предполагаю, что первое — это то, что вам нужно.
Возможно, также:
set p_list($net_name) "IO2"
И вы также можете изменять имена переменных.
Есть и другие варианты:
set "p_list(pad)" "IO2"
set net_name {"pad"}
Я не думаю, что это сделает вас счастливыми, но они поступят правильно.
Комментарии:
1. Я бы также рекомендовал более чистые отступы, но это не имеет особого значения для небольших примеров. В более крупных программах чистый отступ помогает упростить быстрое чтение кода.