欢迎来到天天文库
浏览记录
ID:55797726
大小:904.00 KB
页数:55页
时间:2020-06-07
《TCL编程高级教程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、TCL编程高级教程测试平台开发部周健明04245培训内容命名空间脚本库和程序包ITCL命名空间命名空间的基本概念命名空间概念定义命名空间示例限定命名名称解析输入命令输出命令命名空间的命令参考命名空间命名空间的基本概念命名空间是一个命令与变量的集合。命名空间把命令和变量封装起来以确保它们不会干扰别的命名空间中的命令和变量。TCL已经有一个这样的集合,就是我们指的全局命名空间。全局命名空间将所有的全局变量和命令放在一起。命名空间也叫做名称空间、名称域、命名域等。命名空间命名空间创建:用namespaceeval命令创建一个新的命名空间命名空间查询如
2、果要在命名空间XXX之外查询命名空间内部变量的值xxx,可以用如下语句:set::XXX::xxx命名空间命名空间示例1:用namespaceeval命令创建一个新的命名空间:namespaceevalCounter{namespaceexportbumpvariablenum0procbump{}{variablenumincrnum}}set::Counter::num::Counter::bump命名空间命名空间示例2:命名空间是动态的。你可以在任何时候添加、删除命令和变量:namespaceevalCounter{variablenum
3、0procbump{}{variablenumreturn[incrnum]}}命名空间命名空间示例2:命名空间是动态的。你可以在任何时候添加、删除命令和变量:namespaceevalCounter{proctest{args}{return$args}}namespaceevalCounter{renametest""}test过程先被加到Counter命名空间中,稍后又被rename命令移除了命名空间命名空间示例3:命名空间里面可以拥有其它的命名空间形成一个嵌套的分层目录结构。namespaceevalFoo{variablefooVar
4、0......namespaceevalCounter{namespaceexportbumpvariablenum0procbump{}{variablenumincrnum}}}命名空间命名空间示例3:现在如果在Foo之外访问num就要把Foo也加入到限定命名中:set::Foo::Counter::num而在Foo内部访问num就只需要用:setCounter::numset::Foo::Counter::num命名空间限定命名限定命名又叫限定名称、资格命名或资格名称,英文原名为qualifiednames每一个命名空间有一个原始的名称诸
5、如histroy或::safe::interp。由于命名空间可能嵌套,限定命名被用来表示命令、变量、子命名空间。限定命名跟Unix的路径或TK部件(widgets)的分层目录结构类似,只是命名空间的限定命名使用::作为分隔符而不是/或.而已。最顶层或全局的命名空间的名称是空(如:空字符串),在形式上与::同义。如果你想访问另一个命名空间中的命令和变量,你必须使用额外的语法结构,使用命名空间的限定命名。命名空间限定命名除了全局命名空间外,命名空间的命名都不为空。除了作为命名空间的分隔符外,::也不被简单的命令、变量、命名空间命名接受。在限定命名尾
6、部的::表示该命名空间变量或命令的命名是{},因此在限定命名空间名称尾部的::会被忽略。另外,在限定命名中单个的:将被看作单个的字符,而2个或更多的单个:将被当作一个命名空间分隔符看待。例如:namespaceeval::aa::bb::cc{setx100};#定义命名空间::aa::bb::cc中的变量xset::aa::bb::cc::x;#查询x的值,将返回100set::aa:::bb::::cc::::x;#也返回100,b与c之间的3个:,c与x之间的4个:都被当作一个::看待set::aa:bb::c::x;#将出错,因为b与c
7、之间的1个:被当作普通的字符看待,但并没有定义::a:bb这样的命名空间,所以要小心!::aa::bb表示的是命名空间aa下的命名空间bb,而::aa:bb表示的是命名空间aa:bb。命名空间名称解析一般来说,所有的TCL命令都支持变量和命令的限定命名。也就是说你可以在set、proc、rename、interpalias等命令中使用限定命名。如果你提供以::开头的完整限定命名,则可以精确地找到你指的命令、变量或命名空间。命名空间名称解析如果命名不是以::开头的,则意味着相对路径的命名,TCL提供如下的名称解析策略:首先在当前命名空间中查找,如
8、果没有才在全局命名空间查找。如果在当前命名空间和全局命名空间都没找到,则该命名尚未定义。例1:settraceLevel0namespaceevalD
此文档下载收益归作者所有