Tcl中的list和string经常没有很严格的区分。一个变量是list还是string完全取决于使用的场合。
concat命令很容易被误解为是把几个list合并成为一个list,看下面的例子就知道实际情况并非如此。
tcl>concat "a { " b " c } d"
a { b c } d
tcl>llength [concat "a { " b " c } d"]
3
tcl>lindex [concat "a { " b " c } d"] 1
b c
地一个concat命令的结果中的多余空白表明concat实际上是把各个参数所代表的字符串用空格分隔组成一个新的字符串;而不是把各个参数所代表的list合并成一个新的list。否则接下来的llength和lindex命令的结果应该是另一种样子。
Tcl中的join命令也是用于把list中的元素用指定的分隔符(默认是空格)组成一个字符串。
但在使用默认分隔符(空格)的情况下,会得到一些有趣的结果。
tcl>set list [list a b {c d} e]
tcl>llength $list
4
tcl>join $list :
a:b:c d:e
tcl>join $list
a b c d e
tcl>llength [join $list]
5
用':'拼接字符串时,没什么特别之处。但用默认的空格拼接字符时,拼接后的结果作为list对待时,与之前相比,变得扁平了一层。