2010-07-22 3 views
4

В Python я могу написать что-то вроде:Как распаковать список в переменные в Tcl?

my_list = [4, 7, "test"] 
a, b, c = my_list 

После этого a является 4, b является 7 и c является "test" из распаковки операции в последней строке. Могу ли я сделать что-то вроде последней строки в Tcl? Для того, чтобы сделать его более ясным, я хочу что-то вроде этого:

set my_list {4 7 test} 
setfromlist $mylist a b c 

(Т.е. setfromlist будет команда, я ищу.)

ответ

14

Вы хотите lassign:

% lassign 
wrong # args: should be "lassign list ?varName ...?" 
% lassign {1 2 3} a b c 
% set a 
1 
% set b 
2 
% set c 
3 

Если вы используя более старую версию Tcl (которая не имеет lassign), вы можете использовать foreach для достижения того же результата

foreach {a b c} {1 2 3} {break} 
+0

lassign входит в стандартную комплектацию Tcl 8.5. Если вы используете Tcl 8.4: пакет требует Tclx –

+0

Или, если вы не хотите все Tclx, вы можете просто написать версию lassign, которая использует foreach для достижения той же функциональности (foreach обычно использовался для этой цели ранее к добавлению lassign) – RHSeeger