Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用C库中的TclTK返回整数_R_C_Tcl - Fatal编程技术网

R 使用C库中的TclTK返回整数

R 使用C库中的TclTK返回整数,r,c,tcl,R,C,Tcl,我有使用Tcl/Tk库的C代码。然后,我使用这个C代码创建一个库,然后将其链接到R语言包。我在C代码中有一个函数: int doSomething(){ if(TRUE){ return TCL_OK; else{ TCL_RESULT3("Error") return TCL_OK; } 目前,我在C代码中使用TCL\u RESULT3(“Error”),然后在R中检查result,当您的C代码返回TCL\u Error(而

我有使用Tcl/Tk库的C代码。然后,我使用这个C代码创建一个库,然后将其链接到R语言包。我在C代码中有一个函数:

int doSomething(){
   if(TRUE){
      return TCL_OK;
   else{
      TCL_RESULT3("Error")
      return TCL_OK;
}

目前,我在C代码中使用
TCL\u RESULT3(“Error”)
,然后在R中检查
result,当您的C代码返回
TCL\u Error
(而不是
TCL\u OK
)时,这是一种错误条件,在逻辑上类似于其他语言中的异常。你能处理这些吗?(显然,我对R知之甚少)。这里有一种方法(当然还有其他方法;正确的选择取决于您正在做什么以及异常的可能原因)


result某些类型的错误当然可以在Tcl端得到更好的处理。有一个相当复杂的
try
命令可以帮助您。它在逻辑上类似于R中的
tryCatch()
,但更适合不同语言的工作方式。还有一个较旧的
catch
命令,但它确实暴露了一些特性。
if (startsWith(result, "Error"))
        {
            return(FALSE)
        }
        return(TRUE)
int doSomething(){
   if(TRUE){
      return TCL_OK;
   else{
      return TCL_ERROR;
}
result <- tryCatch(
    {
        # This is where you put in the code to call into Tcl
        tclvalue(tcl(...)) # calls doSomething()
    },
    error = function(err) {
        message(paste("error occurred in Tcl code:", err))
        return(NaN)   # Need an alternative result value here
    }
)