我想创建一个可以使用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
现在我从我的bat文件中将其称为
tclsh multi_argu.tcl 1 2 3
但是出局是
path-> 1 2 3
rev_start->
rev_end->
在我的tcl文件的末尾,我打电话给multi_argu $argv
,我认为这是罪魁祸首。但是,我不知道如何为多个参数执行此步骤。任何人都可以提供任何意见吗?
答案 0 :(得分:4)
由于$argv
是一个列表,因此您将列表变量传递给proc,这意味着$args
成为一个包含一个列表元素的列表。
在tcl 8.5中,您可以对调用proc的方式进行微小更改:
multi_argu {*}$argv
{*}
将枚举列表中的项目,因此$args
会成为项目列表。
否则,我想你可以使用类似的东西:
foreach {path rev_start rev_end} [lindex $args 0] { ... }
这种方式违背了使用args
作为proc的参数的目的。在这种情况下,您也可以使用其他变量名称。
答案 1 :(得分:0)
你必须将multi_argu定义为proc吗?您的.bat文件只能调用multi_argu.tcl 包含:
puts "Calling $argv0 with $argc arguments: $argv..."
foreach {path rev_start rev_end} $argv {
puts "path-> $path"
puts "rev_start-> $rev_start"
puts "rev_end-> $rev_end"
}
现在,当您从bat文件中调用
时tclsh multi_argu.tcl 1 2 3
输出结果为:
Calling multi_argu.tcl with 3 arguments: 1 2 3...
path-> 1
rev_start-> 2
rev_end-> 3