tcl/itcl — итерация foreach по входному списку аргументов с двумя аргументами

У меня есть следующий код, который я написал, который должен выполнять итерацию в моем списке ввода аргументов с чтением двух аргументов на каждой итерации. Проблема в том, что он не работает так, как я написал. Я просмотрел веб-страницу Википедии Tcl/Tk, но не смог найти никакого полезного совета. Могу ли я сделать так, как я написал (без преобразования в массив)?

itcl::body class::config {args} {
if {[llength $args] > 1} {
    foreach {option value} in $args {
        if {[string length $option] == 0 || [string length $value] == 0} {
            puts "Runtime error::Bad Input: option flag or value is missing"
            return
        }
        switch --$option {
            -a { 
                if { [string is integer $value -strict] } {
                    #do something
                }
            }
            -b { 
                    if { [string is integer $value -strict] } {
                    #do something
                }
            }
        }
return }

person ms_stud    schedule 02.08.2018    source источник
comment
Что такое Tcl/Tk Wikipedia web page?   -  person mrcalvin    schedule 03.08.2018
comment
wiki.tcl.tk   -  person ms_stud    schedule 05.08.2018


Ответы (2)


Бросьте in, вам просто нужно:

foreach {option value} $args {

См. документацию по адресу https://www.tcl.tk/man/tcl/TclCmd/foreach.htm

person Colin Macleod    schedule 02.08.2018

Некоторые подсказки. Вместо:

[string length $option] == 0

вы также можете написать:

$option == ""

Опция -strict в этом случае избыточна, потому что вы уже пропускаете пустые строки. Кроме того, вы должны поставить опцию сразу после «целое число»:

string is integer -strict $value
person HanT    schedule 20.09.2018