我在使用 nashorn 时遇到问题,我不太了解原生构造函数的工作原理(对象、数组等)。
我的问题涉及应用程序生命周期中的多个 ScriptEngine,其中一些可以创建函数。
我尝试在新的 ScriptEngines 中使用这些函数,问题是我无法检查对象是否属于给定类型(array instanceof Array),因为该 Array 不是由该实例的 Array 构造函数生成的。
这是一个复制它的测试:
def "Just testing"() {
when:
def manager = new ScriptEngineManager()
def engine1 = manager.getEngineByName("nashorn")
def engine2 = manager.getEngineByName("nashorn")
def arrImpl = engine1.eval("[]")
engine2.context.setAttribute("arr", arrImpl, ScriptContext.ENGINE_SCOPE)
def val = engine2.eval("arr instanceof Array")
then:
val == true
}
我读了这篇文章https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes并试图像这样解决它,但仍然没有运气
def "Just testing"() {
when:
def manager = new ScriptEngineManager()
def engine1 = manager.getEngineByName("nashorn")
def engine2 = manager.getEngineByName("nashorn")
def context = new SimpleScriptContext()
def bindings = engine1.getContext().getBindings(ScriptContext.ENGINE_SCOPE)
context.setBindings(bindings, ScriptContext.ENGINE_SCOPE)
def arrImpl = engine1.eval("[]")
context.setAttribute("arr", arrImpl, ScriptContext.ENGINE_SCOPE)
def val = engine2.eval("arr instanceof Array", context)
then:
val == true
}
你知道如何让它工作吗?