R 使用C库中的TclTK返回整数
我有使用Tcl/Tk库的C代码。然后,我使用这个C代码创建一个库,然后将其链接到R语言包。我在C代码中有一个函数: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(而
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
}
)