会话是Renjin不像here所描述的那样是线程安全的,但它是否可以重入?
该场景是从java engine.eval(“...”)调用的,它有一个Java类,它再次调用相同的engine.eval(“..”)方法。我们假设为简单起见,我们只有一个引擎实例。
答案 0 :(得分:2)
是的,这是可能的。
请注意,通过在原始ScriptEngine实例上调用engine.eval()
,将在全局环境中计算表达式,并且R函数无法看到调用Java方法的R调用堆栈。
您还可以要求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