TCL - вызывает proc с аргументами командной строки, не зная количество передаваемых аргументов - PullRequest
0 голосов
/ 12 апреля 2019

Я попытаюсь прояснить ситуацию.

Я хочу вызвать процедуру с некоторыми аргументами из командной строки, но не зная, сколько аргументов нужно этому процессу.

Я действительно хочуВызовите в моем сценарии 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]

Edit: dll_interface $ argv или dll_interface {*} $ argv возвращает ошибку «Неверный метод» из функции dll.Кажется, что функция dll получает $ argv как целую строку.

Я не могу изменить способ работы dll, и я надеюсь, что я достаточно ясно с моим описанием проблемы, которую я имею.

Большое спасибо.

1 Ответ

0 голосов
/ 12 апреля 2019

Во всех поддерживаемых в настоящее время версиях Tcl вы можете использовать расширение «оператор» (это не оператор в техническом смысле, но вы можете притвориться, что это так), чтобы преобразовать список в несколько слов, по одному для каждого элемента списка.,* * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * *1007* *1007* * * * * * * * * * *) * * * * * * * * *1007* * * * * * * * * * * *))):

eval [linsert $argv 0 dll_interface]

но это действительно неочевидно!(eval dll_interface $argv тоже подойдет, но есть и другие, более тонкие проблемы, которые могут возникнуть при переходе в более сложные ситуации.)

...