Java Renjin会话是否可重入

Java Renjin会话是否可重入,java,renjin,Java,Renjin,会话是线程安全的,但它是可重入安全的吗 该场景是从java engine.eval(“…”)调用的,该java类再次调用相同的engine.eval(“…”)方法。为了简单起见,我们假设只有一个引擎实例。是的,这是可能的 请注意,通过对原始ScriptEngine实例调用engine.eval(),将在全局环境中对表达式求值,并且R函数将无法看到调用Java方法的R调用堆栈 您还可以要求Renjin在调用时将当前的上下文传递给Java方法。例如: class MyJavaClass { s

会话是线程安全的,但它是可重入安全的吗

该场景是从java engine.eval(“…”)调用的,该java类再次调用相同的engine.eval(“…”)方法。为了简单起见,我们假设只有一个引擎实例。

是的,这是可能的

请注意,通过对原始ScriptEngine实例调用
engine.eval()
,将在全局环境中对表达式求值,并且R函数将无法看到调用Java方法的R调用堆栈

您还可以要求Renjin在调用时将当前的
上下文
传递给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
import(MyJavaClass)

如果这真的很好,问题是让R调用“我们的引擎”,在他的查询中有R代码。这是从上下文的角度来看的。