0

有没有办法避免在列表中拆分字符串?

例如,我有一个列表,我在其中附加了几个带空格的字符串:

set l [list]
lappend l "hello guy how are you ?"
lappend l "chocolate is very good"

然后我想通过 foreach 循环处理列表中的每个字符串:

foreach str $l {
   puts "$str"
} 

但是当它到达列表中的最后一个字符串时,这个最后一个字符串的所有元素都会被拆分。如何避免这种情况?

谢谢。

4

2 回答 2

3

我怀疑你所拥有的实际上是在某个地方:

lappend l "chocolate" "is" "very" "good"
# And not this...
#lappend l "chocolate is very good"

这是一个非常重要的区别。lappend命令是可变的;它需要尽可能多的参数(在变量名之后),并将它们中的每一个作为自己的列表元素附加到给定的变量中。这意味着省略引用不会导致错误;即使不是在您的特定情况下,它通常也是正确且有用的。

注意lappend是小心;它不会错误地引用任何东西。


另一种可能性是您使用append而不是lappend. 这会将其参数作为字符串而不是列表项附加。(只是碰巧很多句子看起来很像 Tcl 列表。)这两个命令之间的区别是根本的,如果你赶时间的话,可能有点容易错过。

append l " chocolate is very good"
# vs.
lappend l " chocolate is very good"
于 2013-09-12T17:16:39.050 回答
0

附加是避免这种情况的最佳方法。简化附加:

 % set l [list]
 % set l "$l hello guy how are you ?"
  hello guy how are you ?
 % set l "$l chocolate is very good"
  hello guy how are you ? chocolate is very good

或者

 % set l [list]
 % append l "hello guy how are you ?"
 hello guy how are you ?
 % append l " chocolate is very good"
 hello guy how are you ? chocolate is very good
于 2013-09-13T07:03:33.697 回答