如何利用动态变量设置新变量?
如何利用动态变量设置新变量?
嘿,我太懂你碰到的这个问题了!在Tcl里直接写set data_select$i这种代码确实会踩坑——Tcl不会自动帮你解析变量名里的$i,它会把data_select$i当成一个完整的、从未定义过的变量名,自然就会抛出“变量不存在”的错误啦。
别担心,有两种简单的方法能解决这个问题:
方法一:用双引号包裹动态变量名
你只需要把要赋值的目标变量名用双引号括起来,这样Tcl就会先解析里面的$i,生成正确的变量名后再执行赋值操作。修改后的代码应该是这样的:set i 1 set "data_select$i" [$txtvar get all]这样一来,Tcl会先把
"data_select$i"解析成data_select1,然后把[$txtvar get all]的结果赋值给这个变量,完全不会报错。你之后可以用puts $data_select1来验证值是不是正确的。方法二:用
upvar创建变量别名(适合多次引用的场景)
如果你之后需要多次操作这个动态生成的变量,还可以用upvar给它起一个固定的别名,用起来更顺手:set i 1 upvar 0 "data_select$i" temp_var set temp_var [$txtvar get all]这里的
upvar 0表示在当前作用域创建一个叫temp_var的别名,它直接指向动态生成的data_select1变量。之后你对temp_var做的任何操作,都会同步到data_select1上,非常方便。
备注:内容来源于stack exchange,提问作者Alex AJF




