У меня есть сценарий 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
Как правильно оценить небольшой скрипт с помощью Нашорна? ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1763056823
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;
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/46018207/how-to-proper-evaluate-a-small-script-with-nashorn[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия