【发布时间】:2013-06-12 20:28:16
【问题描述】:
上下文 我想通过 SWIG 从 C/C++ 调用 Tcl 回调。更重要的是,我希望它是一个闭包。
先验知识 http://computer-programming-forum.com/57-tcl/4481cebe0f09966d.htm(不,那不是我,只是在 Google 搜索中看起来足够相似的唯一东西)
使用 Python,我在 Python 端创建一个对象,给它一个 __call__ 方法,通过 SWIG 将它作为 PyObject* 丢弃,它仍然可以访问 Python 中编码的非局部变量(有点胶水代码),因为它仍然与创建它的解释器密切相关。
我的理解(在这里纠正我) 在 Tcl 中,我从 C 调用函数的唯一方法是通过一个新的解释器传递一个表示命令的字符串(但是......那么闭包在哪里......?)。如果我从 Tcl 调用 C/C++,仍然有同样的问题,因为 C/C++ 不知道调用 Tcl 解释器。
Annnnddd...文档 (http://www.tcl.tk/man/tcl8.6/TclLib/contents.htm) 虽然内容丰富,但...嗯,确实很丰富。集体知识请拯救我的无知。
问题如何获得闭包/修改 Tcl 中的名称从 C/C++ 指向的值?或者甚至只是获取调用 C/C++ 代码的解释器的句柄...?
【问题讨论】:
-
我正在尝试了解您正在尝试的呼叫模式。您是否要创建一个 Tcl 命令,该命令在调用时会在 C++ 端调用某种闭包?
-
而且 Tcl 不做闭包(由于 Tcl 中值的性质,这很难修复;该语言实际上大量使用不可变引用)。它确实在 8.6 中执行协程和类,但它们是 named 实体;真正的价值观不能那样运作。
-
第一条评论:是的。第二条评论,好吧,编辑/编辑问题。