Использовать один список в качестве нескольких переменных, например аргумент формата - PullRequest
0 голосов
/ 04 марта 2020

В Tcl

set f "%-3s %-3s %-3s"
set t {"aaa" "bbb" "ccc"}
puts [format $f $t]

Я знаю, что это неверно, и он выдаст ошибку:

недостаточно аргументов

Так как исправить это?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вы можете использовать расширение списка (начиная с Tcl 8.5):

set f "%-3s %-3s %-3s"
set t {"aaa" "bbb" "ccc"}
puts [format $f {*}$t]

В предыдущих версиях вам приходилось использовать eval, то есть не рекомендуется

puts [eval format \$f $t]
0 голосов
/ 04 марта 2020

Поскольку число спецификаторов и аргументов для format фиксировано, почему бы не использовать lassign:

% lassign $t v1 v2 v3
% puts [format $f $v1 $v2 $v3]
aaa bbb ccc

В общем случае оператор расширения {*} является целевым когда число спецификаторов, а следовательно, аргументов несколько динамично c. Но в случае со c вы получите более надежный скрипт при использовании lassign. Представьте себе ваш список в t разного размера, в то время как format ожидает ровно три аргумента значения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...