有没有办法避免在列表中拆分字符串?
例如,我有一个列表,其中我附加了几个带空格的字符串:
set l [list]
lappend l "hello guy how are you ?"
lappend l "chocolate is very good"
然后我想通过foreach循环处理列表中的每个字符串:
foreach str $l {
puts "$str"
}
但是当它到达列表中的最后一个字符串时,最后一个字符串的所有元素都会被拆分。怎么避免这个?
感谢。
答案 0 :(得分:3)
我怀疑你所拥有的实际上是某个地方:
lappend l "chocolate" "is" "very" "good"
# And not this...
#lappend l "chocolate is very good"
这是一个非常重要的区别。 lappend
命令是 variadic ;它提供的参数与您提供的参数一样多(在变量名称之后),并将它们作为自己的列表元素附加到给定变量。这意味着省略引用不会导致错误;它是正确的,有用的一般即使不在你的特定情况下也是如此。
请注意lappend
要小心;它不会错误地引用任何东西。
另一种可能性是您使用了append
而不是lappend
。将其参数附加为字符串而不是列表项。 (恰好有很多句子看起来很像Tcl列表。)两个命令之间的区别是基本的,如果你赶时间,可能有点容易错过。
append l " chocolate is very good"
# vs.
lappend l " chocolate is very good"
答案 1 :(得分: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
OR
% 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