使用不匹配的左括号迭代列表

Iterate over list with unmatched open braces

我有以下代码:

set m "value {1{0}"
foreach i $m {puts $i}

这会导致错误 "unmatched open brace in list"。 由于大括号不匹配,TCL 似乎不认为 m 是有效列表。有办法解决这个问题吗?

为避免此类错误,您不应在应为 "lists" 的地方使用 "strings"。 foreach 过程暗示其第二个参数的列表。就 TCL 列表而言,您的字符串不正确。 TCL 解释器很聪明,但它不知道如何将这个值转换为正确的列表。

第一个选项是将变量设置为列表:

set m [list "value" "{1{0}"]
foreach i $m {puts $i}

第二个选项是将字符串转换为列表(在此示例中用 space 拆分字符串):

set m "value {1{0}"
set m [split $m " "]
foreach i $m {puts $i}

同样,不要在需要 "lists" 的地方使用 "strings"。可以使用字符串,但是你应该充分理解你在做什么,并确保字符串的格式正确才能转换成列表。