Имеет ли значение порядок встроенных команд tcl-скриптов? - PullRequest
0 голосов
/ 29 сентября 2019

Я использую язык tcl и использую встроенные команды для запуска сценариев внутри основного сценария tcl.в material_qz.tcl есть некоторые определенные параметры, которые необходимы для get_qzParam.tcl.Хотя get_qzParam.tcl выполняется до material_qz.tcl, я не получаю никакой ошибки.У меня вопрос, имеет ли значение порядок выполнения встроенных команд?

source get_qzParam.tcl;
source material_qz.tcl;

1 Ответ

2 голосов
/ 29 сентября 2019

Порядок определения процедур или других команд в Tcl не имеет значения, если они были определены до выполнения команды.Тело процедуры не анализируется, пока не будет вызван в первый раз.Таким образом, вы даже можете поместить туда полную чепуху, которая не повредит, если она никогда не будет выполнена.

proc documentation {} {
    This proc doesn't contain valid code, but that
    doesn't lead to an error if it is never invoked.
}

Итак, если ваш файл get_qzParam.tcl только определяет процедур, которые используют вещи изmaterial_qz.tcl, но эти процессы не запускаются до тех пор, пока не будет загружен material_qz.tcl, тогда все будет работать.


Команды также могут быть переопределены во время выполнения, а затем будет использовано новое определение.в следующий раз команда вызывается.Это очень хорошая функция, которую можно использовать для интерактивного исправления ошибок в работающей программе.

Другое использование - настроить команду, которая выполнит некоторую подготовку, а затем заменит себя для будущего использования.Например, это откроет базу данных sqlite только при первом использовании:

proc db {args} {
    package require sqlite3
    sqlite3 db database.db
    tailcall db {*}$args
}

Здесь команда sqlite3 перезаписывает процедуру db proc.Поэтому в будущих вызовах будет использоваться эта новая команда.Но это не влияет на уже запущенный процесс db, который может завершить то, что он делает.Дополнительный поворот в том, что в конце db proc вызывает команду db.Но это новая команда БД.

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