List 如何在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

我有一个关于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"
}

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进行全局设置,谢谢大家!