用无与伦比的大括号遍历列表

时间:2019-11-12 00:23:55

标签: tcl

我有以下代码:

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

这将导致错误“列表中不匹配的大括号”。 由于括号不匹配,TCL似乎不认为m是有效列表。有办法解决这个问题吗?

1 个答案:

答案 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}

同样,不要在期望使用“列表”的地方使用“字符串”。可以使用字符串,但是您应该完全了解自己在做什么,并确保该字符串采用正确的格式以转换为列表。