在Tcl中循环赋值编号变量后,如何在另一循环中调用这些变量?
Tcl动态编号变量的正确调用方法
嘿,我来帮你搞定这个问题!你之前的调用代码之所以不行,是因为Tcl的变量替换规则在搞事情——当你写"$Col$colNum"的时候,Tcl会先尝试解析$Col这个变量,但你根本没定义过Col,只定义了Col1、Col2这类带数字后缀的变量,所以这要么会报错,要么输出空值,完全达不到你想要的效果。
下面给你两种靠谱的解决办法:
方法1:用set命令间接取值
set命令除了赋值,还能接受变量名作为参数返回它的值,刚好可以用来动态拼接变量名并取值:
for {set colNum 1} {$colNum < 37} {incr colNum} { # 先拼接出变量名Col1/Col2...,再用set获取它的值 puts [set Col$colNum] }
这里Col$colNum会先被替换成对应的变量名(比如当colNum=1时就是Col1),然后set命令返回这个变量的内容,最后用puts输出。
方法2:改用数组(更推荐!)
其实用编号变量不如用Tcl的数组来管理,代码更清晰,也不容易出问题:
初始化数组
for {set colNum 1} {$colNum < 37} {incr colNum} { set Col($colNum) 0 }
调用数组元素
for {set colNum 1} {$colNum < 37} {incr colNum} { puts $Col($colNum) }
数组的方式不需要处理变量名拼接的问题,直接通过索引就能访问对应的值,后续维护也更方便。
内容的提问来源于stack exchange,提问作者Alaaldeen Eldawie
相关产品推荐
相关产品推荐

