2017-05-19 19 views
1

ScriptEngineを使用して文字列から入力用のラムダ関数に変換しようとしています。これは私がこれまでに作ってみたものですが、私だけの経験エラー:ラムダ式のため文字列からラムダへの変換

ScripEngine engine = new ScriptEngineManager().getEngineByName("javascript"); 
someFunctionThatTakesInALambdaEquation((Function<Double, Double>)engine.eval("x -> x + 3")); 
+0

が好きで、これまでどのようなあなたの質問に 'javascript'タグを追加するかもしれないでください。 –

答えて

1

はJavaScriptの構文はx => x + 3ある、または同等に、あなたは匿名関数function(x) { return x + 3; }としてそれを書くことができます。 ラムダ式x -> x + 3のJavaの構文とは少し異なります。

私はengine.eval("x => x + 3");を試しましたが、スクリプトエンジンから例外があります。なぜか分からない。
しかし

AbstractJSObject obj = (AbstractJSObject) engine.eval("function(x) { return x + 3; }"); 

では、JavaScriptの関数オブジェクトを取得することができます。次に、これをJava関数オブジェクト(別名ラムダ式)に変換する必要があります。

Function<Double, Double> f = x -> (Double) obj.call(null, x); 

、その後、あなたが

someFunctionThatTakesInALambdaExpression(f); 
+0

これはうまく動作します。 "x => x + 3"の構文は私にとってはうまくいきません。理由はわかりません... –

+0

"x => x + 3"は正常に動作しているようです。 y = eval( "x => x + 3"); y(3); // 6を出力する – junvar

関連する問題