pkg_mkIndex

Создает индексный файл для автоматической загрузки пакета.

СИНТАКСИС

      pkg_mkIndex dir pattern ?pattern pattern...?
    

ОПИСАНИЕ

Процедура pkg_mkIndex представляет собой утилиту для работы с Tcl-библиотеками. Она обеспечивает создание индексных файлов, необходимых для автоматической загрузки пакетов, когда в приложении встречается команда package require. Для создания автоматически загружаемых пакетов необходимо выполнить следующие действия:

ЗАГРУЗЧИК ПАКЕТОВ И АВТОЗАГРУЗЧИК

Автозагрузчик и загрузчик пакетов во многом имеют сходные возможности, поскольку и тот, и другой предназначены для загрузки файлов по требованию. Однако загрузчик файлов представляет собой механизм более высокого уровня, который использует автозагрузчик на последнем шаге процесса загрузки. Как правило, предпочтительнее индексировать пакеты с помощью команды pkg_mkIndex, чем с помощью команды auto_mkindex, поскольку это обеспечивает подключение механизма версий. Вы можете иметь несколько версий одного и того же пакета и, более того, использовать в различных приложениях различные версии. Напротив, auto_mkindex позволяет работать с единственной версией пакета. Скорее всего, не стоит создавать индексы для пакета с помощью и pkg_mkIndex, и auto_mkindex, поскольку в этом случае трудно контролировать, какой из механизмов загрузки пакета сработает первым, и, соответственно, какая версия пакета будет загружена.

КАК ЖЕ ЭТО РАБОТАЕТ?

При первом вызове команды package require исполняется скрипт package unknown. При инициализации Tcl-скрипт package unknown задается таким образом, что он выполняет все файлы pkgIndex.tcl в каталогах auto_path. Эти файлы содержат команды package ifneeded для каждой доступной версии каждого доступного пакета. Эти команды в свою очередь вызывают команды package provide, которые объявляют данные версии доступными. Кроме того, они формируют необходимую исходную информацию для автозагрузчика. Данный файл данной версии данного пакета реально загружается только тогда, когда вызывается первая из содержащихся в нем команд. Таким образом, после выполнения команды package require вы не увидите команд пакета в интерпретаторе, но, тем не менее, вы сможете их вызвать и при этом они загрузятся автоматически.