То, что вы написали, правильно: строковые значения будут интерпретироваться как список в команде foreach
.
Однако я бы написал это, чтобы прояснить ваши намерения, и использовать команду switch
, чтобы быть более кратким:
set employeeList [list]
set TYPEID_3456 8
set TYPEID_9876 6
set TYPEID_6578 7
switch -exact -- $employeeType {
1 {lappend employeeList 8}
2 {lappend employeeList 6 7}
default {puts "failed"}
}
foreach employee $employeeList {
switch -exact -- $employee {
$TYPEID_3456 {
#do something
}
$TYPEID_9876 {
#do something
}
$TYPEID_6578 {
#do something
}
}
}
Или создатьструктура данных, которая объединяет employeeList
и employeeType
:
array set employeeList {
1 {8}
2 {6 7}
}
set TYPEID_3456 8
set TYPEID_9876 6
set TYPEID_6578 7
if { ! [info exists employeeList($employeeType)]} {
puts "no employee list for employee type '$employeeType'"
} else {
foreach employee $employeeList($employeeType) {
switch -exact -- $employee {
$TYPEID_3456 {
#do something
}
$TYPEID_9876 {
#do something
}
$TYPEID_6578 {
#do something
}
}
}
}