2013-09-05 2 views
0

Я хочу использовать массив списка в tcl. Вот как я его инициализировал:Можно ли создать массив списка в TCL?

for {set i 0} {$i<5} {incr i} { 
    set defer_req$i {} 
} 

Его рабочий тон. Но когда я использую эти списки в процедуре, он дает ошибку «не может читать defer_req, никакой такой переменной». пожалуйста, помогите мне

ответ

4

Вы не создали массив. Вы создали набор переменных с общим префиксом «defer_req» и ​​числовым суффиксом. Как указано в части руководства Tcl variable syntax, адресация массива использует круглые скобки. Таким образом, ваш оператор присваивания должен быть

set defer_req($i) {} 

и в пожилом код, который использует это, вы можете использовать что-то вроде:

puts $defer_req($memberName) 

Вы не должны использовать массив - вы можете оставить свой код как это , создавая набор одинаково названных переменных. В этом случае, чтобы использовать значение, которое будет необходимо:

puts [set defer_req$memberName] 

который первым запускает набор заявление (часть адреса в фигурных скобках) и расширяющийся $ MemberName в суффикс, создающей полное имя переменной. Затем set command с одним аргументом возвращает значение именованной переменной.

Наивная версия ($ defer_req $ memberName) попытается подставить в значение переменной, называемой defer_req, и объединить ее значение с переменной переменной memberName.

1
array set ar {} 
set ar(key) {} 
for {set i 0} {$i < 100} {incr i} { 
    lappend ar(key) $i 
} 
puts $ar(key) 
Смежные вопросы