List 如何在TCL中为列表正确赋值?
我有一个关于tcl中列表的问题,给列表赋值的正确方法是什么List 如何在TCL中为列表正确赋值?,list,foreach,tcl,List,Foreach,Tcl,我有一个关于tcl中列表的问题,给列表赋值的正确方法是什么 set employeeList "" set TYPEID_3456 8 set TYPEID_9876 6 set TYPEID_6578 7 if {$employeeType=="1"} { set employeeList "8" } elseif {$employeeType=="2"} { set employeeList "6 7" } else { prints "failed" } for
set employeeList ""
set TYPEID_3456 8
set TYPEID_9876 6
set TYPEID_6578 7
if {$employeeType=="1"} {
set employeeList "8"
} elseif {$employeeType=="2"} {
set employeeList "6 7"
} else {
prints "failed"
}
foreach employee $employeeList {
if {$employee==$TYPEID_3456} {
#do something
} elseif {$employee==$TYPEID_9876} {
#do something
} elseif {$employee==$TYPEID_6578} {
#do something
}
}
这是正确的方法吗?因为它告诉我TYPEID_3456无法读取。您写的是正确的:字符串值将在
foreach
命令中解释为列表
不过,我想这样写,以便更清楚地了解您的意图,并使用命令更简洁:
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
}
}
}
}
我不能改变foreach循环的结构,它是一组现有的代码,我不能改变它。如果我们的代码是正确的,但为什么它告诉TYPEID_3456无法读取?根据您发布的代码,这不应该发生。这是一个范围问题吗:TYPEID_3456是一个全局变量吗?您是否试图在过程中使用它而不将其声明为全局变量?@ratzip很清楚,您编写的代码在呈现给我们时起作用。这似乎是正确的。它不适用于您意味着您在编写问题时遗漏了至少一个重要的细节。是的,我发现了问题,我没有对TYPEID_3456进行全局设置,谢谢大家!