2016-06-29 2 views
0

я это ниже фрагмента кода,разница между возвращаемой строкой из метода и строки переменной

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 заявления заключен в двойных кавычках, следовательно, он выводит значение, как это.

Как я могу сделать оператор для вычисления выражения как , как и другие строковые переменные?

EDIT

В 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 
} 
+3

Попробуйте 'System.out.println (engine.eval (" eval (hi.values ​​()) "));' –

+0

вы спрашиваете о javascript 'eval'? https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/eval –

+2

Для вашего теста javascript вы возвращаете строку «1! = 1», поэтому всегда будете оценивать значение true, так как это а не булев, это строка. 1! = 1 без кавычек будет оцениваться как false. – cloudwalker

ответ

1

Как я могу сделать заявление, чтобы оценить выражение, как, как другие строковые переменные?

Почему бы не engine.eval() дважды?

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

В Java, если я добавить, [некоторый код, который делает что-то] я попытался же на JavaScript [некоторый идентичный выглядящий код, который делает другую вещь]

Там нет неявного вызова eval в JavaScript. Это означает, что result содержит непустую строку1!=1, которая становится true в if-statement.

Смежные вопросы