2

A Session is Renjin 不是这里描述的线程安全,但它是可重入安全的吗?

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

4

1 回答 1

2

是的,这是可能的。

请注意,通过调用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
于 2017-04-20T08:14:52.747 回答