2015-01-29 6 views
1

내가 자바 6 & 7, Nashorn에 포트에 코뿔소javax.script의 패키지와의 ScriptEngine (를 사용하는 Rhino1.7R4하고 org.mozilla.javascript 패키지를 사용하여 소프트웨어를 자바 8).Java ScriptEngine (nashorn & rhino) : 범위/바인딩을 스택하는 방법?

주요 문제는 범위 (스택)를 스택하는 것입니다. Rhino의 항아리를 사용하여, 내가 할 : 그래서

  • Scriptable scope ... 
    Scriptable newScope = javascriptContext.initStandardObjects(); 
    newScope.setParentScope(scope); 
    

    을 변수가 VAR없이 정의 된 경우, 변수가 var에 정의 된 경우는 전역 변수 (루트 범위)

  • 입니다, 변수가 액세스되거나 수정되는 경우 로컬 범위 (현재 범위)
  • , 현재 범위의 엔진 조회, 상위 및 상위 상위 ... 및 전역 범위

JS 표준 동작입니다.

setParentScope과 javax.script API를 어떻게 처리 할 수 ​​있습니까?

답변

1

내 JDK에서 찾을 수있는 구현 중 어떤 것도 재귀 적 조회가 없습니다. 귀하의 유일한 옵션은 Bindings 부모에게 돌아갈 수있는 사용자 정의 Bindings 구현을 작성하는 것이라고 생각합니다.

편집 : Nashorn에서만 (Rhino가 아닙니다.) 미안하지만, jdk.nashorn.api.scripting.ScriptObjectMirror은 프로토 타입 객체를 변경하기 위해 setProto()이 있으므로 더 많은 기능을 제공 할 수 있습니다. 여기에 ScriptObjectMirror에 대한 추가 정보 : https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes

+0

API가 충분하지 않습니다. 변수에 대한 값 할당이 전역 변수 또는 지역 변수인지 여부는 알 수 없습니다 (명령문의 "var"키워드 포함 또는 불포함). –

관련 문제