A Session is Renjin 不是这里描述的线程安全,但它是可重入安全的吗?
该场景是从具有再次调用相同 engine.eval("..") 方法的 Java 类的 java engine.eval("...") 调用的。为简单起见,假设我们只有一个引擎实例。
是的,这是可能的。
请注意,通过调用engine.eval()
原始 ScriptEngine 实例,表达式将在全局环境中计算,R 函数将无法看到调用 Java 方法的 R 调用堆栈。
您还可以要求 RenjinContext
在调用时将当前值传递给您的 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