Spec-Zone.ru › Tcl/Tk

неизвестный

Имя

неизвестный — Обработка попыток использовать несуществующие команды

Синтаксис

неизвестный имя_команды ?арг арг ...?

Описание

Эта команда вызывается интерпретатором Tcl всякий раз, когда скрипт пытается вызвать несуществующую команду. По умолчанию реализация неизвестного — это процедура библиотеки, определенная при инициализации интерпретатора Tcl. Вы можете переопределить поведение по умолчанию неизвестного, чтобы изменить его функциональность, или вы можете зарегистрировать новый обработчик для отдельных пространств имен с помощью команды namespace unknown. Обратите внимание, что в безопасном интерпретаторе нет реализации неизвестного по умолчанию.

Если интерпретатор Tcl сталкивается с именем команды, для которой не определена команда (ни в текущем пространстве имен, ни в глобальном пространстве имен), то Tcl проверяет наличие обработчика неизвестных команд для текущего пространства имен. По умолчанию этот обработчик — команда с именем ::unknown. Если такой команды нет, интерпретатор возвращает ошибку. Если команда неизвестный существует (или для текущего пространства имен был зарегистрирован новый обработчик), то она вызывается с аргументами, состоящими из полностью заменённого имени и аргументов исходной несуществующей команды. Команда неизвестный обычно выполняет такие действия, как поиск в каталогах библиотек процедуры команды с именем имя_команды, расширение сокращённых имён команд до полных или автоматическое выполнение неизвестных команд как дочерних процессов. В некоторых случаях (например, при расширении сокращений) неизвестный немного изменит исходную команду, а затем (её) снова выполнит. Результат команды неизвестный используется в качестве результата для исходной несуществующей команды.

Реализация неизвестного по умолчанию работает следующим образом. Сначала она вызывает процедуру библиотеки auto_load для загрузки команды. Если это успешно, она выполняет исходную команду с её исходными аргументами. Если автозагрузка завершилась неудачно, неизвестный вызывает auto_execok, чтобы проверить, существует ли исполняемый файл с именем cmd. Если да, то она вызывает команду Tcl exec с cmd и всеми args в качестве аргументов. Если cmd нельзя выполнить автоматически, неизвестный проверяет, была ли команда вызвана на верхнем уровне и вне любого скрипта. Если это так, неизвестный выполняет два дополнительных шага. Во-первых, она определяет, имеет ли cmd одну из следующих трёх форм: !!, !событие или ^старое^новое?^?. Если это так, неизвестный выполняет замену истории так же, как это делала бы команда csh для этих конструкций. Наконец, неизвестный проверяет, является ли cmd уникальным сокращением для существующей команды Tcl. Если это так, она расширяет имя команды и выполняет команду с исходными аргументами. Если ни одно из вышеперечисленных действий не позволило выполнить команду, неизвестный генерирует ошибку. Если глобальная переменная auto_noload определена, шаг автозагрузки пропускается. Если глобальная переменная auto_noexec определена, шаг автовыполнения пропускается. В обычных условиях возвращаемое значение неизвестного — это возвращаемое значение команды, которая в конечном итоге была выполнена.

Пример

Установите для команды неизвестный её стандартное поведение, за исключением первоначального протоколирования факта того, что команда не найдена:
# Save the original one so we can chain to it
rename unknown _original_unknown

# Provide our own implementation
proc unknown args {
    puts stderr "WARNING: unknown command: $args"
    uplevel 1 [list _original_unknown {*}$args]
}

См. также

info, proc, interp, library, namespace

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

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

Spec-Zone.ru

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