TCL - 使用不知道要传递的参数数量的命令行参数调用 proc

TCL - Call a proc with command line arguments not knowing the number of arguments to pass

我会尽量说清楚。

我想从命令行用一些参数调用一个过程,但不知道这个过程需要多少个参数。

我实际上想在我的 tcl 脚本中调用一个来自 dll 的函数。这个函数只是一个调用其他函数的接口,所以传递给这个函数的第一个参数实际上是最终使用的函数。

tcl myscript.tcl dll_final_function arg1 arg2 arg3
#DLL already loaded



#DLL function call

#It doesn't work but shows the "way" I want to do it
dll_interface $argv

#It works, but not in the "way" I want because I want a generic solution
dll_interface [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3]

编辑:dll_interface $argv 或 dll_interface {*}$argv returns 来自 dll 函数的 'Invalid method' 错误。看起来 dll 函数接收 $argv 作为一个完整的字符串。

我无法更改 dll 的工作方式,我希望我对我遇到的问题的描述很清楚。

非常感谢。

在所有当前支持的Tcl版本中,您可以使用扩展“运算符”(它不是技术意义上的运算符,但您可以假装它是)将列表转换为多个单词,每个单词一个项目清单。由于 argv 已经是一个列表,因此您的命令变为:

dll_interface {*}$argv

就这么简单


在非常老的 Tcl 版本中,你会这样做:

eval [linsert $argv 0 dll_interface]

但这真的不明显! (eval dll_interface $argv 也可以,但是当您遇到更复杂的情况时,往往会出现其他更微妙的问题。)