如何将列表的内容发送到 Tcl 中的过程中?

How do I get the contents of list sent into a procedure in Tcl?

我有一个 TCL 过程,它对 returns 一个列表的加载包进行函数调用。当我使用 llindex 查询列表的条目数时,它是准确的。但是,当我将该列表发送到填充 Tk 列表框的过程时,该列表没有条目; llindex 函数声明列表中的整数个数为零。对于一段代码,在我的主要代码中有:

set ents [pw::Grid getAll -type pw::Connector]
makeWindow . $ents

$ents 中有 17 个元素。然后在我的 makeWindow 过程中,我有:

makeWindow {root args} {
    label $base.targetDeltaTxt -text "Target Cell:"
    entry $base.targetDelta -cursor {} -textvariable entry
    ...
    set num_cons [expr ([llength $args]-1)]
    ...
}

$num_cons 是 1,尽管发送时它有 17。似乎在 TCL 中,将列表发送到过程会将所有列表元素连接到一行文本中。为什么?

您 运行 了解这样一个事实,即具有名为 "args" 的过程的最后一个参数会导致特殊行为。有关详细信息,请参阅 https://www.tcl.tk/man/tcl8.6/TclCmd/proc.htm。将参数从 args 重命名为其他名称,例如ents 应该可以解决问题。