标签:tcl
Tcl解释器将所有的命令和全局变量分组管理。这些小组称为命名空间,一个命名空间中的命令和变量不会影响到另一个命名空间。这些命名空间呈树形组织,一个命名空间的命令可以被另一个命名空间引入。命名空间树的根就是全局命名空间,它包含了没有明确在其他命名空间中创建的所有命令和变量。
任何已经存在的命名空间中的命令和变量,都可以从命名空间内部或外部创建。在命令或变量的名称前面加上命名空间前缀就可以完成这一点,前缀与名称之间以NameSpace::Var来分隔。若全局命名空间的名称是空字符串,通常只写::Var.
命名空间的主要用途是作为创建相关命名包的机制。命名空间可以帮助创建集合命令,把一个命令空间中公共API编组,呈现为公共命令加子命令的模式。
l namespace eval: --> 获取命名空间的名称
如果在命名空间中设置新变量,用下面命令:
l namespace delete:--> 删除命名空间
l variable命令:--> 对命名空间的变量进行设置或访问
在当前命名空间中创建变量,如果给出变量的值,就设置。如果在该命名空间的一个过程中进行处理,它还会使得指定名称的变量不做限定就在过程中可见.
输出结果:
NOTE:总是使用variable命令声明变量。在一个命名空间中,如果访问一个没有在该命名空间明确声明的变量,Tcl会首先在全局变量中查找这个名称的变量。如果找到这样的全局变量,Tcl会使用它而不是创建一个命名空间变量。Tcl语言的这种行为初看起来好像不方便,其实这样设计是为了在各个命名空间中,都能很容易地访问预定义的全局变量argv、env等.
Variable命令不能初始化数组的值,但它可以在命名空间中设置变量,允许过程访问它们。也就是说,数组需要单独进行一步初始化操作。
输出结果:
l namespace qualifiers命令:--> 取得限定名称的命名空间部分
l namespace tail命令:--> 取得限定名称的尾部命名空间
要把各部分名称组成限定名称,只需要用文本的::把它们串联起来。注意:如果把命名空间保持在一个变量中,需要用下面的后一种形式进行变量替换,否则$变量替换时::会引起错误的解析.
l namespace export, namespace import命令: --> 导入导出命令
输出结果:
NOTE:
全局命名空间不会默认导出任何命令,而且这一命名空间习惯上是留给应用程序脚本管理的。库不应该从全局命名空间导出命令,也不应该向全局命令空间导入命令。
l namespace forget命令: --> 防止删除自己创建的命名空间
namespaceimport命令有快照的含义:它只导入在调用它时处于可导出状态的命令。而且,默认情况下它不会覆盖已经存在的命令,即使这些命令是以前导入的。可以用 –force选项强制指定进行覆盖。如果希望从命名空间中移除以前导入的命令,而又怕删掉自己创建的命名空间,应该使用namespace forget命令。
l namespace current命令: --> 获取当前命名空间的名称
l namespace parent命令: --> 获取当前命名空间的父命名空间
l namespace childred命令: --> 获取当前命名空间的子命名空间
l info commond命令: --> 查看命名空间中的命令和变量
l namespace which命令: --> 获取完全限定名称
l namespace origin命令: --> 获取命名空间的来源
NOTE:
namespaceorigin:可以查看命令的原始来源,即使它被重命名过。
l namespace ensemble create命令: --> 测试命令
该命令用于测试一个命令是否为集合命令,是则为真。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:tcl
原文地址:http://blog.csdn.net/jerry_1126/article/details/47360525