Команда namespace eval
- Создает пространство имен, если оно не существует
- Запускает код, предоставленный ему, из этого пространства имен
Procs, определенные из пространства имен (которое является всеми процессами, поскольку пространство имен по умолчанию: ::)
- Если ему предшествует абсолютное пространство имен, эта команда будет определяться в указанном пространстве имен
- Если ему предшествует относительное пространство имен, эта команда будет определяться относительно текущего пространства имен
Как таковой
namespace eval bob {
namespace eval joe {
proc proc1 {} {}
}
proc proc2 {} {}
proc ::proc3 {} {}
proc joe::proc4 {} {}
}
proc proc5 {} {}
proc bob::joe::proc6 {} {}
proc ::bob::joe::proc7 {} {}
Следующие команды будут существовать
::bob::joe::proc1
::bob::proc2
::proc3
::bob::joe::proc4
::proc5
::bob::joe::proc6
::bob::joe::proc7
Обратите внимание, что командам в глобальном пространстве имен при вызове из глобального пространства имен может предшествовать ::
или нет. То же самое относится и к командам в любом пространстве имен.
namespace eval bob {
proc2 ;# calls ::bob::proc2
::proc5 ;# calls ::proc5 (proc5 in the global namespace)
joe::proc4 ;# calls ::bob::joe::proc4
}
Стоит отметить, что необработанное имя команды (без каких-либо квалификаторов пространства имен) будет искать в текущем пространстве имен, а затем, если оно не найдет команду, глобальное пространство имен.
namespace eval bob {
proc5 ;# calls ::proc5 since there is no ::bob::proc5
}