Встроенные команды ТCL


namespace

        Команда предназначена для создания и управления областями имен для команд и переменных.

         Синтаксис
        namespace ?option??arg ...?

        Описание

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

namespace children?namespace??pattern?
        Позволяет получить список областей-потомков для области имен namespace. Если аргумент namespace отсутствует, то возвращается список областей-потомков для текущего пространства имен. Команда возвращает полные имена, начинающиеся с «::». Если указан аргумент pattern, команда возвращает только те имена, которые удовлетворяют шаблону pattern. Проверка на соответствие производится по тем же правилам, что и в команде glob. При этом шаблон, начинающийся с «::», используется непосредственно, в противном случае используемый шаблон составляется из namespace (или полного имени текущего пространства имен) и pattern.

namespace code script
        Позволяет захватить контекст текущей области имен для скрипта script с тем, чтобы потом использовать этот контекст при выполнении данного скрипта. Команда возвращает новый скрипт, в котором старый скрипт «завернут» в команду namespace code. Новый скрипт имеет две важные особенности: во-первых, он может быть вызван в произвольном пространстве имен, при этом реально он будет выполняться в текущем пространстве имен (том, в котором выполнялась команда namespace code). Во-вторых, к созданному таким образом скрипту можно дописывать произвольные аргументы и они действительно будут использоваться как дополнительные аргументы. Например, предположим, что команда:

        set script [namespace code {foo bar}]

выполняется в пространстве имен ::a::b. Тогда команда

        eval "$scripc х у"

может быть выполнена в любом пространстве имен и будет иметь тот же эффект, что и команда

        namespace eval ::a::b {foo bar x y}

        Эта команда необходима потому, что расширения Tcl, например, Тk, обычно выполняют вызванные по событиям скрипты в глобальном пространстве имен. Обертывающая команда захватывает необходимую команду вместе с ее пространством имен и позволяет корректно выполнить ее позже по соответствующему вызову..

namespace current
        Позволяет получить полное имя текущей области имен. Хотя реальное имя глобального пространства имен пустая строка, эта команда возвращает для него «::», поскольку это часто бывает удобнее при программировании.

namespace delete?namespace namespace...?
        Позволяет удалить одну или несколько областей имен, при этом удаляются все переменные, процедуры и области-потомки заданной области имен. Если внутри одного из удаляемых пространств имен выполняется какая-либо процедура, оно будет сохранено до завершения процедуры, но помечено, как приготовленное к удалению, чтобы исключить вызов других процедур. Если указанное пространство имен не существует, команда возвращает ошибку. Если ни одно пространство имен не указано, команда не делает ничего.

namespace eval namespace arg?arg...?
        Позволяет активизировать пространство имен namespace и выполнить в его контексте заданный код. Если пространство имен namespace не существует, оно будет создано. Если пространство имен должно быть предком несуществующего пространства имен, то оно тоже создается. Если задано более одного аргумента, все они объединяются в одну строку через пробел (как при выполнении команды eval) и полученный скрипт выполняется.

namespace export?-clear? ?pattern pattern...?
        Позволяет указать, какие команды разрешено экспортировать из данного пространства имен. Эти команды потом могут быть импортированы в другие пространства имен с помощью команды namespace import. Можно разрешать экспорт как команд, созданных в данном пространстве имен, так и команд, ранее импортированных из других пространств. Команда, разрешаемая для экспорта, может в данный момент не существовать. Каждый из шаблонов pattern может содержать специальные символы как в команде glob, но не может содержать имени пространства имен. То есть шаблон может указывать команды только в текущем пространстве имен. Каждый из шаблонов добавляется к списку шаблонов команд, разрешенных для импорта из данного пространства имен. Если в команде указан флаг -clear, команда предварительно удаляет старый список. Если не указаны ни флаг, ни шаблоны, команда возвращает текущий список шаблонов.

namespace forget?pattern pattern...?
        Удаляет из пространства имен ранее импортированные команды. Каждый образец pattern должен быть полным именем команды с указанием хотя бы одного пространства имен и может содержать специальные символы, как в команде glob, например: foo::x или а::b::р*. Специальные символы нельзя использовать в именах пространств имен. При выполнении данной команды сначала ищутся команды, удовлетворяющие шаблону и разрешенные к экспорту из соответствующих пространств имен. Далее проверяется, какие из них были импортированы в текущее пространство имен. После чего импортированные команды удаляются. То есть команда выполняет действия, противоположные действиям команды namespace import.

namespace import?-force??pattern pattern...?
        Импортирует команды в текущее пространство имен. Каждый образец pattern должен быть полным именем команды с указанием хотя бы одного пространства имен и может содержать специальные символы, как в команде glob, например foo::x или а::b::р*. Специальные символы нельзя использовать в именах пространств имен. Все команды, которые удовлетворяют шаблонам и разрешены для экспорта, добавляются к текущему пространству имен. Для этого в текущем пространстве имен создается новая команда, которая указывает на экспортируемую команду в исходном пространстве имен. При вызове этой новой команды она вызывает исходную команду. Если в текущем пространстве имен уже есть команда с таким именем, возвращается ошибка, если не указана опция -force. В противном случае импортируемая команда заменяет команду, определенную ранее. Команда namespace import импортирует в текущее пространство имен только те функции, которые в момент исполнения существуют в соответствующем пространстве имен. Если позже там будут созданы новые команды с именами, удовлетворяющими шаблонам, разрешающим экспорт, и шаблонам, определяющим импорт, то они не импортируются автоматически.

namespace inscope namespace arg?arg...?
        Выполняет скрипт в контексте пространства имен namespace. Эта команда не предназначена для непосредственного исполнения программистом. Ее вызовы создаются автоматически при использовании команды namespace code для создания скриптов, выполняемых в фоновом режиме, например, для Tk-виджетов. Команда namespace inscope похожа на команду namespace eval, но отличается от нее наличием возможности указывать дополнительные аргументы и тем, что пространство имен namespace должно существовать в момент выполнения команды. При выполнении команды первый аргумент рассматривается как список, к которому остальные аргументы добавляются как элементы списка. Так команда

        namespace inscope ::foo а х у z

эквивалентна

        namespace eval ::fоо [concat a [list х у z]]

        Такая семантика весьма удобна при формировании скриптов, выполняемых в фоновом режиме.

namespace origincommand
        Возвращает полное имя оригинальной команды command, от которой происходит заданная импортированная команда. При импорте команды в текущем пространстве имен создается новая команда, которая указывает на экспортируемую команду в исходном пространстве имен. Если команда последовательно импортирована в пространства имен а, b,...,n, причем в каждое последующее пространство имен она импортировалась из предыдущего, то namespace origin вернет полное имя команды в первом пространстве имен, то есть а. Если команда command не импортирована, то namespace origin вернет ее полное имя.

namespace parent?namespace?
        Возвращает полное имя родительского пространства имен для пространства namespace. Если аргумент namespace не указан, возвращает полное имя предка текущего пространства имен.

namespace qualifiers string
        Возвращает полное имя пространства имен для string, то есть часть строки string от начала до последнего символа «::» (но не включая его). Например, для строки ::foo::bar::x эта команда вернет ::foo::bar, а для «::» — пустую строку. Команда является парной для команды namespace tail. При выполнении команды проверка существования соответствующих пространств имен не производится.

namespace tail string
        Возвращает простое имя, завершающее полное имя string, то есть часть строки string от последнего символа «::» (но не включая его) до конца строки. Например, для строки ::foo::bar::x эта команда вернет х, а для «::» — пустую строку. Команда является парной для команды namespace qualifiers. При выполнении команды проверка существования соответствующих пространств имен не производится.

namespace which?-command??-variable? name
        Рассматривает name как имя команды или переменной (в зависимости от указанной опции; по умолчанию — как имя команды) и возвращает ее полное имя. Например, если name не существует в текущем пространстве имен, но существует в глобальном, то возвращает полное имя в глобальном пространстве имен. Если команда или переменная не существует, данная команда возвращает пустую строку.
Hosted by uCoz