Return 使用 C 库中的 TclTK 的整数
Return integer using TclTK from C library
我有使用 Tcl/Tk 库的 C 代码。然后我使用这个 C 代码创建一个库,然后链接到 R 语言包。我在 C 代码中有一个函数:
int doSomething(){
if(TRUE){
return TCL_OK;
else{
TCL_RESULT3("Error")
return TCL_OK;
}
目前,我在 C 代码中使用 TCL_RESULT3("Error")
,然后在 R 中检查 result <- tclvalue(tcl(...)) #calls doSomething()
return 是否包含 Error
:
的字符串
if (startsWith(result, "Error"))
{
return(FALSE)
}
return(TRUE)
并根据 returned 值在 R 中进行进一步的操作。
然而,即使有错误,我仍然调用 TCL_OK
因为 TCL_ERROR
产生了一些 R 似乎无法处理的东西(至少它不是直截了当的)。我的问题是是否可以将我的功能重组为:
int doSomething(){
if(TRUE){
return TCL_OK;
else{
return TCL_ERROR;
}
并让 R 了解正在 return编辑的内容。目前,如果 TCL_OK
被 return 编辑,那么 result
将是一个空字符串 ""
。如果 TCL_ERROR
是 returned,那么结果将产生:Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : [tcl] .
R 不知道如何处理。
是否可以让 R 处理此类错误(即 return 如果弹出此错误,值为 FALSE)或正在使用 TCL_RESULT3()
结合 [= 检查错误消息17=] 这种过程的最佳方法?
当您的 C 代码 returns TCL_ERROR
(而不是 TCL_OK
)这是一个错误条件,这在逻辑上类似于其他语言中的异常。 R 能处理这些吗? Yes(显然;我对 R 知之甚少)。这是一种方法(当然还有其他方法;正确的选择取决于您正在做的事情以及异常的可能原因)。
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
}
)
请注意,如果您调用任意 Tcl 命令,您几乎必须处理异常。失败是生活中不可或缺的事实,您需要在健壮的代码中允许失败。
我有使用 Tcl/Tk 库的 C 代码。然后我使用这个 C 代码创建一个库,然后链接到 R 语言包。我在 C 代码中有一个函数:
int doSomething(){
if(TRUE){
return TCL_OK;
else{
TCL_RESULT3("Error")
return TCL_OK;
}
目前,我在 C 代码中使用 TCL_RESULT3("Error")
,然后在 R 中检查 result <- tclvalue(tcl(...)) #calls doSomething()
return 是否包含 Error
:
if (startsWith(result, "Error"))
{
return(FALSE)
}
return(TRUE)
并根据 returned 值在 R 中进行进一步的操作。
然而,即使有错误,我仍然调用 TCL_OK
因为 TCL_ERROR
产生了一些 R 似乎无法处理的东西(至少它不是直截了当的)。我的问题是是否可以将我的功能重组为:
int doSomething(){
if(TRUE){
return TCL_OK;
else{
return TCL_ERROR;
}
并让 R 了解正在 return编辑的内容。目前,如果 TCL_OK
被 return 编辑,那么 result
将是一个空字符串 ""
。如果 TCL_ERROR
是 returned,那么结果将产生:Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : [tcl] .
R 不知道如何处理。
是否可以让 R 处理此类错误(即 return 如果弹出此错误,值为 FALSE)或正在使用 TCL_RESULT3()
结合 [= 检查错误消息17=] 这种过程的最佳方法?
当您的 C 代码 returns TCL_ERROR
(而不是 TCL_OK
)这是一个错误条件,这在逻辑上类似于其他语言中的异常。 R 能处理这些吗? Yes(显然;我对 R 知之甚少)。这是一种方法(当然还有其他方法;正确的选择取决于您正在做的事情以及异常的可能原因)。
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
}
)
请注意,如果您调用任意 Tcl 命令,您几乎必须处理异常。失败是生活中不可或缺的事实,您需要在健壮的代码中允许失败。