2015-01-27 6 views
0
proc mulval { addr } { 
    set lst [list [split $addr "."]] 
    set lst2 [list a b c d] 
    foreach i [$lst2] j [$lst] { 
     set $i [$j] 
     puts "$i $j" 
    } 
} 

приведенный выше код для печати каждого значения, присутствующие в списке, т.е. lst2 и $ LST печатаются и присваивается имя переменной от $ lst2 и значение от $ lst. ошибка показывает в коде «недопустимое имя команды„ABCD“»Еогеасп список TCL печать каждое значение в Tcl и присвоить каждому значение переменной в списке TCL

+0

Are вы разбираете IP-адрес? У нас есть [специальный пакет для этого в Tcllib] (http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/dns/tcllib_ip.html), и он знает о более сложных случаях, чем вы. –

ответ

3

Квадратные скобки используются для команд ... удалить их:

proc mulval { addr } { 
    set lst [list [split $addr "."]] 
    set lst2 [list a b c d] 
    foreach i $lst2 j $lst { 
     set $i $j 
     puts "$i $j" 
    } 
} 
+3

И 'set lst [list [split ...]]' также выглядит подозрительно. Уверен, что 'set lst [split $ addr". "]' Больше похоже на то, что нужно. –

0

Если вы хотите, чтобы назначить элементы списка, есть несколько способов сделать это. В вашем коде вы сделали что-то вроде этого:

foreach varName {a b c d} value [split $addr .] {set $varName $value} 

Это работает, но немного сложнее. Этот вызов делает то же самое:

foreach {a b c d} [split $addr .] {} 
# can also be written as 
foreach {a b c d} [split $addr .] break 

Если у вас есть Tcl 8.5 или более поздней версии, вы должны использовать lassign вместо:

lassign [split $addr .] a b c d 

Документация: break, foreach, lassign, set, split

Смежные вопросы