我有以下代码:
set m "value {1{0}"
foreach i $m {puts $i}
这将导致错误“列表中不匹配的大括号”。 由于括号不匹配,TCL似乎不认为m是有效列表。有办法解决这个问题吗?
答案 0 :(得分:3)
为避免此类错误,您不应在预期使用“列表”的地方使用“字符串”。 foreach
过程隐含其第二个参数的列表。根据TCL列表,您的字符串不正确。 TCL解释器很聪明,但是它不知道如何将该值转换为正确的列表。
第一个选项是将变量设置为列表:
set m [list "value" "{1{0}"]
foreach i $m {puts $i}
第二个选项是将字符串转换为列表(在此示例中,用空格将字符串分隔):
set m "value {1{0}"
set m [split $m " "]
foreach i $m {puts $i}
同样,不要在期望使用“列表”的地方使用“字符串”。可以使用字符串,但是您应该完全了解自己在做什么,并确保该字符串采用正确的格式以转换为列表。