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

时间:2019-04-12 12:53:25

标签: command-line arguments tcl command-prompt proc

我会努力弄清楚。

我想从命令行调用带有某些参数的proc,但不知道该proc需要的参数数量。

我实际上想在我的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从dll函数返回“无效方法”错误。似乎dll函数将$ argv作为整个字符串接收。

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

非常感谢您。

1 个答案:

答案 0 :(得分:0)

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

dll_interface {*}$argv

就这么简单。


在Tcl的较旧版本中,您可以改为:

eval [linsert $argv 0 dll_interface]

但这真的不是显而易见的! (eval dll_interface $argv也可以使用,但是还有其他更细微的问题,随着您进入更复杂的情况,这些问题会逐渐出现。)