Порядок определения процедур или других команд в 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.Но это новая команда БД.