gpt4 book ai didi

c - tcl 库 : how to use tcl_eval() to set return result for c-code tcl command extension?

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:27 25 4
gpt4 key购买 nike

假设我实现了一个用 c 代码编写的新 tcl 命令,我使用 Tcl_CreateObjCommand 注册了它,并且在这个 c 代码内部我调用 Tcl_Eval 来评估包含代码的字符串以创建关联数组并将其存储在变量 tmp 中.如何将使用 Tcl_eval() 创建的 tmp 变量设置为 c 函数的返回结果对象?

例子:

int MyCommand(
ClientData clientData,
Tcl_Interp* interp,
int argc,
char* argv[])
{

int rc = Tcl_Eval(interp,
"array set tmp [list {key1} {value1} {key2} {value2}]");
if (rc != TCL_OK) {
return rc;
}

//???
Tcl_SetObjResult(interp, ?? tmp variable from eval??);
return TCL_OK;
}

当我运行带有上述 C 扩展的 Tcl 解释器时,我希望看到这个结果:

TCL> set x [MyCommand]

TCL> puts "$x(key1)"
value1 # Currently an Error and not set

TCL> puts "$x(key2)"
value2 # Currently and Error and not set

在某种程度上,上述工作。只是不是我想要的方式。例如,如果我输入:

TCL> set x [MyCommand]

TCL> puts "$tmp(key1)"
value1 # Its Works! Except, I didn't want to set a global variable tmp

TCL> puts "$tmp(key2)"
value2 # Its Works! Except, I didn't want to set a global variable tmp

(也许它是设置 tmp 的“功能”??)无论如何,我仍然希望它通过使用 proc“返回”机制返回值来以正确的方式工作。

从 c-command-extension 的 Tcl_Eval 内部调用 Tcl_Eval() 应该是合法的,因为“Tcl 库”的文档指出对于 tcl_eval,进行嵌套调用以评估其他命令是合法的。我只是不知道如何将对象结果从 Tcl_Eval 复制到 c 扩展过程的“返回”对象。

最佳答案

我在这里看到两个问题。您不能将命令的返回值设置为数组的值,因为数组不是值。数组是由字符串索引的变量集合。这是一个常见的误解。您可以返回数组元素的值。如果您想要一个作为适当 Tcl 值的键/值映射,请考虑使用字典。字典是值,可以作为命令的值返回。

第二个问题为什么要使用 Tcl_Eval() 创建数组。使用 Tcl_SetVar() 或其多种变体之一来构建数组要简单得多。

关于c - tcl 库 : how to use tcl_eval() to set return result for c-code tcl command extension?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com