是一个 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