假设我们有像
这样的代码Tcl_interp* master = Tcl_CreateInterp();
Tcl_Init(master);
Tcl_Eval(interp, "interp create slave");
Tcl_Interp* slave = Tcl_GetSlave(interp, "slave");
是否需要在C ++中调用slave interp上的Tcl_Init?
答案 0 :(得分:1)
一旦你有了这样的奴隶口译员,它就已经初始化了。初始化发生在执行interp create slave
命令期间;在该从属解释器可供使用之前,该命令不会完成。所有Tcl_GetSlave
函数正在执行的是查找相对于上下文主解释器的名称的现有从解释器(您通过interp
参数传入)。
您可能希望在运行脚本之前对从站进行进一步配置(例如设置别名以允许从站调用主站中的特权操作)但是这一直是后Tcl_Init
事。实际上,Tcl_Init
仅用于从主要解释器初始化库访问的上下文中调用;它根本不是从奴隶口译员调用的。 Tcl源包含Tcl_Init
函数的注释:
/*
*----------------------------------------------------------------------
*
* Tcl_Init --
*
* This function is typically invoked by Tcl_AppInit functions to find
* and source the "init.tcl" script, which should exist somewhere on the
* Tcl library path.
*
* Results:
* Returns a standard Tcl completion code and sets the interp's result if
* there is an error.
*
* Side effects:
* Depends on what's in the init.tcl script.
*
*----------------------------------------------------------------------
*/
tl; dr:您无需在奴隶口译员上打电话给Tcl_Init
。