namespace eval
命令_
- 如果命名空间不存在,则创建命名空间
- 运行从该命名空间内提供给它的代码
从命名空间中定义的 Procs(这是所有 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
}