返回方法与字符串变量之间的区别

时间:2016-06-29 12:36:45

标签: java string expression nashorn

我有以下代码,

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class Test {

    public static void main(String[] args) throws Exception {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        Test ctrl = new Test();
        String[] arr = {"1==1"};
        String eer = "1==1";
        engine.put("hi", ctrl);
        System.out.println(engine.eval(arr[0])); //true
        System.out.println(engine.eval(eer)); //true
        System.out.println(engine.eval("hi.values()")); //prints 1==1
    }

    public String values() {
        return "1==1";
    }
}

我可以理解最后一个sout语句用双引号括起来,因此它按原样输出值。

我如何制作语句来评估表达式 像其他字符串变量一样?

修改

如果我添加了java,

String result = ctrl.values(); //returns 1==1
System.out.println(engine.eval(result));//true

我在javascript上尝试过相同的

var result = myfun();
function myfun(){
return "1!=1";
}

if(result){
window.alert("yes"); // This came even when condition is false
}

1 个答案:

答案 0 :(得分:1)

  

如何使语句像其他字符串变量一样评估表达式?

为什么不engine.eval()两次?

System.out.println(engine.eval(engine.eval("hi.values()")));
  

在java中,如果我添加,[某些代码可以做某事]我在javascript上尝试过相同的东西[一些看起来完全不同的相同代码]

在JavaScript中没有对eval的隐式调用。这意味着result包含非空字符串1!=1,在if语句中变为true