【问题标题】:Nashorn gives error with Array.from(string)Nashorn 使用 Array.from(string) 给出错误
【发布时间】:2018-03-25 17:57:23
【问题描述】:

我有一个 javascript 文件 fun.js

function fun1(){
    var str='apple';
    var charArray = Array.from(str);
    return charArray;
}

我使用 nashorn 将此 charArray 返回到我的 java 代码。但是 nashorn 给出了例外 -

javax.script.ScriptException: TypeError: Array.from is not a function in at line number 25

如何将 Array.from() 与 nashorn 一起使用,或者有什么方法可以在 js 中将字符串转换为与 nashorn 兼容的 charArray。

我的 java 代码是 -

    System.out.println("intialising parser....");

    ScriptEngine engine= new ScriptEngineManager().getEngineByName("nashorn");

    engine.eval(new FileReader("index.js"));
    Invocable invocable= (Invocable) engine;

    Object obj = (Object)invocable.invokeFunction("fun1");

【问题讨论】:

    标签: javascript java arrays nashorn


    【解决方案1】:

    有,它是String.toCharArray(),因为 Nashorn 允许您使用 Java 方法。所以你可以这样做,

    System.out.println("initializing parser....");
    String js = "function fun1() { return 'apple'.toCharArray() }";
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    try {
        engine.eval(js);
        Invocable invocable = (Invocable) engine;
    
        Object obj = (Object) invocable.invokeFunction("fun1");
        System.out.println(Arrays.toString((char[]) obj));
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    然后输出

    initializing parser....
    [a, p, p, l, e]
    

    【讨论】:

    • 这可能是正确的,但在我的情况下 split('') 是有效的。感谢您的回复
    • split("") 将创建 N 个字符串,其中包含单个字符。调用 toCharArray 绝对是有效的——因为它会创建实际的 Java char[]
    【解决方案2】:

    后来发现就这么简单-

    function fun1(){
    var str='apple';
    var charArray =str.split('');
    return charArray;
    }
    

    它还与 nashorn 兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2015-12-19
      • 2020-02-03
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2019-01-18
      相关资源
      最近更新 更多