как правильно присвоить значение списку в TCL? - PullRequest
0 голосов
/ 29 марта 2012

У меня есть вопрос о списке в 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 не может прочитать.

1 Ответ

2 голосов
/ 29 марта 2012

То, что вы написали, правильно: строковые значения будут интерпретироваться как список в команде 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
            }
        }
    }
}
...