我有这段代码:
set l [concat a b c "\r\n"]
puts "[llength $l]:$l"
我想添加“\ r \ n”作为列表的最后一个元素,但它似乎被删除了:
>tclsh try.tcl
3:a b c
有什么原因吗?
答案 0 :(得分:1)
根据Tcl的规则,\r
(回车)和\n
(换行符)都是空白字符,因此concat
的空格字符剥离规则将它们从领导中移除和尾随的立场。正如the documentation所说(强调我的):
在修剪每个 的前导和尾随空格后,此命令将每个参数与空格 连接在一起。
如果您希望列表末尾的额外双字符EOL序列不会影响列表中的值,那么之后只需append
:
set l [concat a b c]
append l "\r\n"
puts "$l:[llength $l]"
另一方面,如果您希望该字符串作为列表元素,lappend
它将自动添加所需的所有引用。另请注意,concat
不是 true 列表连接操作(它会执行复杂的字符串操作);真正的列表连接是:
set concatenated [list {*}$listA {*}$listB]
答案 1 :(得分:0)
在Tcl中,列表元素由空格或换行符分隔。因此单独使用换行并不要求它是单独的元素。你应该嵌套列表元素,然后它将工作。
% set l [concat a b c [list "\r\n"]]
a b c {
}
% puts "[llength $l]:$l"
4:a b c {
}
%
答案 2 :(得分:0)