Я пытаюсь реализовать регистратор команд в TCL, где каждая команда оборачивается отпечатками и выполняется в контексте вызывающего.
Метод также должен расширять переменные, которые ссылаются на списки или список списков, добавляя ключевое слово list
в нужных местах.
Например:
proc exec_cmd {cmd} {
uplevel puts \"$cmd\"
uplevel $cmd
}
proc somefunc {inlist1 inlist2} {
...
}
set x [list "P" "Q" "R"]
set y [list [list "A" "B"] [list "X" "Y"]]
exec_cmd {somefunc $x $y}
В приведенном выше примере я хочу, чтобы регистратор печатал [list P Q R]
и [list [list A B] [list [X Y]]
вместо $x
и $y
Как я могу это сделать?
Это то, что я пробовал до сих пор, но это не работает так, как я хочу:
proc exec_cmd {cmd} {
set stripped [string map {\" {} [ \[ ] \]} $cmd]
uplevel puts \"$stripped\"
uplevel $cmd
}
Для приведенного выше примера,вывод, который я получаю:
somefunc P Q R {A B} {X Y}
Но то, что я хочу, это:
somefunc [list P Q R] [list [list A B] [list X Y]]