Spec-Zone.ru › Tcl/Tk

eval

Имя

eval — Выполнение скрипта Tcl

Синтаксис

eval arg ?arg ...?

Описание

Eval принимает один или несколько аргументов, которые вместе составляют скрипт Tcl, содержащий одну или несколько команд. Eval конкатенирует все свои аргументы таким же образом, как команда concat, передает полученную строку интерпретатору Tcl рекурсивно и возвращает результат этого выполнения (или любую ошибку, сгенерированную им). Обратите внимание, что команда list приводит последовательности слов в кавычки таким образом, что команда eval не расширяет их далее.

Примеры

Часто бывает полезно сохранить фрагмент скрипта в переменной и выполнить его позже с добавленными значениями. Эта техника используется во многих местах ядра Tcl (например, в командах fcopy, lsort и обратных вызовах команды trace). Этот пример показывает, как это сделать с помощью основных команд Tcl:
set script {
    puts "logging now"
    lappend $myCurrentLogVar
}
set myCurrentLogVar log1
# Set up a switch of logging variable part way through!
after 20000 set myCurrentLogVar log2

for {set i 0} {$i<10} {incr i} {
    # Introduce a random delay
    after [expr {int(5000 * rand())}]
    update    ;# Check for the asynch log switch
    eval $script $i [clock clicks]
}

Обратите внимание, что в большинстве случаев (когда фрагмент скрипта на самом деле просто список слов, образующих префикс команды), лучше использовать {*}$script при выполнении этого типа вызова. Это менее универсально, чем команда eval, и поэтому проще сделать надёжным на практике. Следующая процедура действует аналогично команде lappend, но она вставляет значения аргументов в начало списка в переменной:

proc lprepend {varName args} {
    upvar 1 $varName var
    # Ensure that the variable exists and contains a list
    lappend var
    # Now we insert all the arguments in one go
    set var [eval [list linsert $var 0] $args]
}

Однако, последняя строка обычно записывается без eval, так:

set var [linsert $var 0 {*}$args]

См. также

catch, concat, error, errorCode, errorInfo, interp, list, namespace, subst, uplevel

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/eval.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/eval.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API