Tcl命名空间集合调用别名时,如何获取别名而非真实过程名?
解决方法
要让过程返回调用时使用的别名(比如::my::newName),可以通过获取上层调用的命令行来实现——info level 0返回的是实际执行的过程名,而info level -1会记录触发这个过程的ensemble调用命令。
修改你的::my::name过程如下:
proc ::my::name {args} { # 从上层调用中提取使用的别名 set invoked_alias [lindex [info level -1] 1] # 拼接成完整的命名空间限定名 puts "::my::$invoked_alias" }
测试验证:
- 调用
my name时,输出::my::name - 调用
my newName时,输出::my::newName
原理说明:
当通过命名空间ensemble的别名(如newName)调用时,实际执行的是::my::name过程,此时info level -1对应的是触发调用的完整命令my newName,从中提取第二个元素就是用户使用的别名,再拼接命名空间前缀即可得到你需要的结果。
内容的提问来源于stack exchange,提问作者Mkn
相关产品推荐
相关产品推荐

