Tcl API如何从Tcl获取列表

Sta*_*tan 4 c++ tcl

Tcl 8.4

在我的Tcl脚本中:

set foo1 false
set foo2 "yes"
set foo3 [list item1 item2 item3]
Run Code Online (Sandbox Code Playgroud)

有一个API可以获得像foo1或foo2这样的标量.例如:Tcl_GetVar(tcl_interp, string("foo1").c_str(), flags).我想知道是否有任何API从Tcl获取列表(如foo3)?

Don*_*ows 6

这是一个两阶段的事情.首先使用Tcl_GetVar函数族之一获取值,然后获得您感兴趣的列表(使用Tcl_SplitListTcl_ListObjGetElements通常).

作为一个更具体的例子:

////// FETCH FROM VARIABLE //////
// The NULL is conventional when you're dealing with scalar variable,
// and the 0 could be TCL_GLOBAL_ONLY or 
Tcl_Obj *theList = Tcl_GetVar2Ex(interp, string("foo1").c_str(), NULL, TCL_LEAVE_ERR_MSG);
if (theList == NULL) {
    // Was an error; message in interpreter result...
}

////// EXTRACT ELEMENTS //////
int objc;
Tcl_Obj **objv;
if (Tcl_ListObjGetElements(interp, theList, &objc, &objv) == TCL_ERROR) {
    // Not a list! error message in interpreter result...
}

////// WORK WITH VALUES //////
for (int i=0 ; i<objc ; i++) {
    const char *value = Tcl_GetString(objv[i]);
    // Whatever...
}
Run Code Online (Sandbox Code Playgroud)