2017-05-19 3 views
1

ScriptEngine을 사용하여 문자열을 입력 용 람다 함수로 변환하려고합니다. 이것은 내가 지금까지 왔어요 것입니다,하지만 난 단지 오류가 발생할 수 : 람다 식에 대한문자열에서 람다로 변환

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

당신은 당신의 질문에'javascript' 태그를 추가 할 수 있습니다 좋아 이제까지 무엇. –

답변

1

자바 스크립트의 구문은 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; }"); 

당신이 자바 스크립트 함수 객체를 얻을 수 있습니다로. 그런 다음이를 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