是一个 Renjin Session 可重入
Is a Renjin Session reentrant
Renjin 的 Session 不像描述的那样是线程安全的here,但它是可重入安全的吗?
场景是从 java engine.eval("...") 调用的 Java class 再次调用相同的 engine.eval (“..“) 方法。为了简单起见,假设我们只有一个引擎实例。
是的,这是可能的。
请注意,通过在原始 ScriptEngine 实例上调用 engine.eval()
,表达式将在全局环境中计算,R 函数将无法看到调用 Java方法。
您也可以要求 Renjin 在调用时将当前 Context
传递给您的 Java 方法。例如:
class MyJavaClass {
static SEXP estimate(@Current Context context, SEXP function) {
return context.evaluate(FunctionCall.newCall(function, IntVector.valueOf(42)));
}
}
然后:
import(MyJavaClass)
f <- function(x) x*2
MyJavaClass$estimate(f) # 84
Renjin 的 Session 不像描述的那样是线程安全的here,但它是可重入安全的吗?
场景是从 java engine.eval("...") 调用的 Java class 再次调用相同的 engine.eval (“..“) 方法。为了简单起见,假设我们只有一个引擎实例。
是的,这是可能的。
请注意,通过在原始 ScriptEngine 实例上调用 engine.eval()
,表达式将在全局环境中计算,R 函数将无法看到调用 Java方法。
您也可以要求 Renjin 在调用时将当前 Context
传递给您的 Java 方法。例如:
class MyJavaClass {
static SEXP estimate(@Current Context context, SEXP function) {
return context.evaluate(FunctionCall.newCall(function, IntVector.valueOf(42)));
}
}
然后:
import(MyJavaClass)
f <- function(x) x*2
MyJavaClass$estimate(f) # 84