使用不匹配的左括号迭代列表
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"。可以使用字符串,但是你应该充分理解你在做什么,并确保字符串的格式正确才能转换成列表。
我有以下代码:
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"。可以使用字符串,但是你应该充分理解你在做什么,并确保字符串的格式正确才能转换成列表。