2
セッションはRenjinが説明されているようにスレッドセーフではありませんhereですが、リエントラントは安全ですか?Renjinセッションのリエントラントです
シナリオは、同じengine.eval( "..")メソッドを再度呼び出すJavaクラスを持つjava engine.eval( "...")からの呼び出しです。わかりやすくするために、エンジンインスタンスが1つしかないと仮定しましょう。
セッションはRenjinが説明されているようにスレッドセーフではありませんhereですが、リエントラントは安全ですか?Renjinセッションのリエントラントです
シナリオは、同じengine.eval( "..")メソッドを再度呼び出すJavaクラスを持つjava engine.eval( "...")からの呼び出しです。わかりやすくするために、エンジンインスタンスが1つしかないと仮定しましょう。
はい、可能です。
元のScriptEngineインスタンスでengine.eval()
を呼び出すと、グローバル環境で式が評価され、R関数はJavaメソッドを呼び出したR呼び出しスタックを認識できなくなります。
呼び出されると、レンジに現在の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
、問題は彼のクエリでRコードを持っていることをR呼び出す「私たちのエンジン」を有するています。それは、文脈の観点からの徴候です。 – ic3