Как правильно оценить небольшой скрипт с помощью Нашорна?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как правильно оценить небольшой скрипт с помощью Нашорна?

Сообщение Anonymous »

У меня есть сценарий JavaScript, похожий на следующий

var base = 1
var next = myPackage.MyClass.getResult(base);


И следующий класс, определенный в пакете myPackage

public class MyClass{
public static getResult(final int base){
//Inner logic
return result; //Returns another class defined by me
}


Теперь метод eval(String script, Bindings n) ScriptEngine возвращает предположительно результат выполнения скрипта, например, где в примере

ScriptEngine engine;= new ScriptEngineManager().getEngineByName("nashorn");
bindings = new SimpleBindings();
engine.eval("1 + 1", bindings);


вызов eval возвращает 2, я решил, что можно сделать что-то подобное:

ScriptEngine engine;= new ScriptEngineManager().getEngineByName("nashorn");
bindings = new SimpleBindings();
String baseScript = "var base = 1; var result = myPackage.MyClass.getResult(base);"
String script = baseScript + "result.toString()";
Object result = engine.eval(script, bindings);


Но результат этого всегда равен нулю, хотя он правильно оценивает метод getResult(base) (если я помещаю внутри точку останова, я могу определить, что вызов выполнен и логика выполнена правильно).

Почему результат всегда равен нулю и как это следует делать правильно?

Изменить: пример полного кода:

public class Main {
public static void main (String[] args) throws java.lang.Exception
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
SimpleBindings bindings = new SimpleBindings();
String baseScript = "var base = 1; var result = Packages.myPackage.MyClass.getResult(base);";
String script = baseScript + "result.toString()";
Object result = engine.eval(script, bindings);
System.out.println(result);
}
}

package myPackage;
public class MyClass
{
public static MyClass.ResultClass getResult(final int base) {
return new MyClass.ResultClass().setString(base);
}

public static class ResultClass{
private String str;

public MyClass.ResultClass setString(int val){
if(val < 10) {str = String.valueOf(val);}
else str = "0";
return this;
}
public String getString(){
return str;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/460 ... th-nashorn
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»