Как использовать массив в операторах switch?

#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. Я бы также рекомендовал более чистые отступы, но это не имеет особого значения для небольших примеров. В более крупных программах чистый отступ помогает упростить быстрое чтение кода.