Как получить значение, возвращаемое последней командой в интерпретаторе TCL? - PullRequest
0 голосов
/ 30 сентября 2019

В Tcl, если я вычисляю команду, и моему выражению не удалось сохранить результат в переменной, кроме переоценки команды, есть ли способ получить возвращаемое значение последней команды в интерпретаторе TCL? Например, в некоторых списках переменная * связана с результатом последней оценки, есть ли что-то подобное в TCL?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Цикл интерпретатора Tcl - довольно простой, с очень небольшим количеством скрытых функций - не сохраняет последнее значение результата для вас;Предполагается, что если вы хотите сохранить это на потом, вы сделаете это вручную (или повторите команду и получите результат заново, чтобы потом сохранить его).

Если вы хотите сохранитьзначение на потом, используйте set. Вы можете использовать * в качестве имени переменной (это допустимо), но на практике это раздражает, поскольку ярлык синтаксиса $var не работает с ним, и вместо этого вам нужно будет сделать:

% set * [expr {2**2**2**2}]; # Or whatever...
65536
% puts "the value was ${*}... this time!"
the value was 65536... this time!
% puts "an alternative is to do [set *]"
an alternative is to do 65536

Это, вероятно, будет немного раздражать при наборе текста;используйте вместо этого имя, например it.

% set it [expr {2**2**2**2}]; # Or whatever...
65536
% puts [string length [expr {123 << $it}]]
19731

(в этом последнем номере довольно много цифр, больше, чем я ожидал…)

0 голосов
/ 01 октября 2019

Например, в некоторых списках переменная * связана с результатом последней оценки, есть ли что-то подобное в TCL?

Зависит, но в-error case, catch может использоваться, чтобы, ну, в общем, перехватить результат последней успешной оценки в прилагаемом скрипте:

proc foo {} {return FOO}
proc bar {} {return BAR}

if {![catch {
    if {rand() < 0.5} {foo} else {bar}
} * opts]} {
    # handle result of last cmd evaluation
    puts ${*}
} else {
    # handle an error
    puts [dict get $opts -errorinfo]
}

Если вы знаете имена командзаранее, команда трассировки может быть другой вариант.

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