TCL中使用foreach迭代传入参数仅循环一次的问题如何解决
TCL foreach迭代异常修复方案
错误原因
你写的foreach语法不符合TCL的规则,存在两个核心问题:
foreach第一个参数是循环变量名列表,不能直接写初始化语句set i 0,你用{set i 0}作为第一个参数时,TCL会把这整串当作一个变量名处理,完全不符合预期。- 遍历目标
$values被大括号包裹时,TCL会阻止变量替换,你实际遍历的是$values这一个字符串,所以只会执行一次循环。
修复后的代码
场景1:仅需要迭代取值
set var [lindex $argv 0] set values [split $var ","] foreach val $values { puts "iterated once,当前值:$val" }
传入value1,value2时会输出两次,分别对应两个传入值。
场景2:需要同时获取迭代次数(索引)
set var [lindex $argv 0] set values [split $var ","] set i 0 foreach val $values { puts "iterated once $i,当前值:$val" incr i }
运行后会依次输出iterated once 0,当前值:value1、iterated once 1,当前值:value2,符合你要的迭代两次的预期。
内容的提问来源于stack exchange,提问作者Insta Life
相关产品推荐
相关产品推荐

