2017-04-18 43 views
2

會話是人人不是線程安全的描述here,但它是可重入安全嗎?是人人會話可重入

這個場景是從java engine.eval(「...」)調用的,它有一個Java類,它再次調用相同的engine.eval(「..」)方法。爲了簡單起見,我們假設我們只有一個引擎實例。

回答

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 
+0

這是非常好的,問題是作爲R呼籲「我們的引擎」,在他的查詢爲R代碼。從上下文的角度來看,這是國家。 – ic3