TCL/JimTcl中proc内info vars命令无法正常匹配变量问题
问题根因
info vars命令默认仅查询当前执行作用域的变量:你封装到autocomplete_helper过程内部调用时,默认搜索的是该函数的局部作用域,而你定义的VAR1、VAR2属于全局作用域变量,自然匹配不到结果。- 你贴的运行结果中
pattern 'V*缺少闭合单引号属于排版转义异常,不属于代码逻辑问题。
修复方案
如果你的自动补全需求是匹配全局变量,只需要在info vars调用时添加-global参数,强制查询全局作用域的变量即可,修改后的代码如下:
proc autocomplete_helper pattern { # check for variables auto-completion puts "pattern '$pattern'" if {[regexp {\$\S+$} $pattern match]} { set vars_pattern [string range $match 1 end] puts "pattern '$vars_pattern'" # 增加 -global 参数指定查询全局作用域变量 return [lsort [info vars -global $vars_pattern]] } puts "other stuff to do" }
如果你的场景需要适配调用者作用域的变量补全(比如用户在自定义过程内部输入变量需要补全),可以把参数替换为-level 1,即可获取autocomplete_helper上层调用者作用域内的变量:
return [lsort [info vars -level 1 $vars_pattern]]
如果需要同时覆盖多个作用域的补全,可分别查询不同作用域的结果后合并去重排序即可。
内容的提问来源于stack exchange,提问作者Tarek BOCHKATI
相关产品推荐
相关产品推荐

