Как мне использовать оператор eval в tcl - PullRequest
0 голосов
/ 18 апреля 2011

Таким образом, в основном в моем сценарии tcl я генерирую строку кода tcl, которую я должен выполнить (т.е. я получаю эту инструкцию во время выполнения).Как только я получу инструкцию tcl, скажем, например, "hello world $ test_var".Как мне выполнить это с помощью tcl?

Использую ли я команду eval или как?

Ответы [ 3 ]

4 голосов
/ 18 апреля 2011

Команда eval - это разумный способ сделать это, но вы можете рассмотреть возможность использования catch, поскольку это позволит отследить любые проблемы, обнаруженные во время оценки сгенерированного кода, например, вот так:

# Generate the code somehow
set variable {puts "hello word $test_var"}

# Execute and trap problems
if {[catch $variable resultMsg]} {
    # An error (or other exception) happened
    puts stderr "BOOM, Error! $resultMsg"
}
2 голосов
/ 18 февраля 2013

Вместо использования [eval], который отлично работает, в новых версиях Tcl вы можете использовать синтаксис {*}.Например:

set cmd "puts"
lappend cmd "abcd ef"
{*}$cmd

Обратите внимание, что для построения вашей команды полезно использовать команды списка, чтобы не сталкиваться с проблемами цитирования.

1 голос
/ 18 апреля 2011

Боюсь, у вас нет другого разумного выбора, кроме как использовать команду eval, например ::

set variable {puts "hello world $test_var"}
eval $variable
...