在 tcl 中传递和调用多个参数

San*_*996 1 arguments tcl batch-file

我想制作一个可以接受N多个参数的 tcl 过程。我想从 bat 文件中调用它。这是我写的程序:

proc multi_argu {args} {
foreach {path rev_start rev_end} $args {
        puts "path-> $path"
        puts "rev_start-> $rev_start"
        puts "rev_end-> $rev_end"
    }
}
multi_argu $argv
Run Code Online (Sandbox Code Playgroud)

现在我从我的 bat 文件中调用它作为

tclsh multi_argu.tcl 1 2 3
Run Code Online (Sandbox Code Playgroud)

但输出是

path-> 1 2 3
rev_start->
rev_end->
Run Code Online (Sandbox Code Playgroud)

在我的 tcl 文件的末尾,我打电话给 multi_argu $argv我认为是罪魁祸首。但是,我不知道如何为多个参数执行此步骤。任何人都可以提供任何意见吗?

Jer*_*rry 5

由于$argv是一个列表,您将一个列表变量传递给您的 proc,这意味着$args成为一个包含一个列表元素的列表。

在 tcl 8.5 中,您可以对调用 proc 的方式稍作更改:

multi_argu {*}$argv
Run Code Online (Sandbox Code Playgroud)

{*}会列举清单的项目,因此$args成为项目的列表。

否则,我想你可以使用类似的东西:

foreach {path rev_start rev_end} [lindex $args 0] { ... }
Run Code Online (Sandbox Code Playgroud)

args尽管这种方式违背了用作 proc 参数的目的。在这种情况下,您也可以使用另一个变量名。