如何在Tcl中清空列表?

如何在Tcl中清空列表?,tcl,Tcl,如何有效地清空Tcl中的列表 我已尝试使用lreplace清空列表,例如: set lst "a b c d e" lreplace $lst 0 [[llength $lst] - 1] # replace all content in the list with "". 怎么样:set lst[list] 参考资料:空字符串是一个有效的值 set lst {} 您可以使用不带参数的[list]而不是{};编译成相同的东西。注意 % lreplace $lst 0 [[llength

如何有效地清空Tcl中的列表

我已尝试使用lreplace清空列表,例如:

set lst "a b c d e"  
lreplace $lst 0 [[llength $lst] - 1]  # replace all content in the list with "".

怎么样:
set lst[list]


参考资料:

空字符串是一个有效的值

set lst {}
您可以使用不带参数的
[list]
而不是
{}
;编译成相同的东西。

注意

% lreplace $lst 0 [[llength $lst] - 1]
invalid command name "5"
将不起作用(它尝试执行命令替换
5-1
,如果找不到任何名为
5
的命令,该操作将失败)

这是更近的一步:

% lreplace $lst 0 end
但是仍然失败,因为它只生成列表中项目的值,其中从
0
end
的项目被替换为零。变量
lst
的内容不会更改

你就是这样做的*

% set lst [lreplace $lst 0 end]
通过将
lreplace
的结果分配回变量
lst
,可以使替换在变量值中生效

*)事实上你不是这样做的,因为这太过分了。
lreplace$lst 0 end
的值等于空字符串,因此只需指定:

% set lst {}
文件: ,

Tcl索引表达式的语法:

  • 基于零的整数索引数
  • end
    最后一个元素
  • end
    -N最后一个元素之前的第N个元素
  • end
    +N最后一个元素后的第N个元素(实际上,N应该是负数)
  • M-N元素M之前的第N个元素
  • M+N元素M之后的第N个元素

表达式中不能有空格。

如果您不再需要变量,
unset lst
IMHO这是一种惯用的方法,我在谷歌上搜索了“如何在tcl中清空列表”,但无法真正找到这个简单问题的解决方案。我想tcl就是那么不受欢迎。谢谢你的回答!谢谢你的回答!很抱歉,我没有真正运行“llreplace”命令,我只是想让pass stackoverflow提交一个非常简单的问题“如何有效地清空tcl中的列表”。