Я пытаюсь собрать базовую тестовую структуру для ряда сценариев JS, которые мне предоставили. Все они бегут на Нэшорне (JDK 11) без проблем в их первоначальной среде обитания. Я сам пытаюсь загрузить и запустить сценарии и выполнять тесты, сравнивая вход и вывод. Хотя я знаю, что их можно запустить через Nashorn, у меня нет доступа к исходному коду, который делает это, и у меня возникает проблема с получением ссылок на все необходимые мне функции/методы. Исходные файлы следуют этому шаблону: < /p>
(function () {
"use strict";
print("Canary: Here I am inside the root level function");
function writeLogEntry(message) {
echo(message);
}
return function main(data) {
print("Canary: Here I am inside main");
writeLogEntry(data.someVitalStat());
return true;
};
})();
< /code>
У меня нет возможности изменить исходные файлы - я должен использовать их как есть. Проблема заключалась в том, чтобы получить ссылку на функции, отличные от Main. Я смог получить рефери для Main следующим образом, что потребовало двух проходов: < /p>
String scriptTextRaw = new String(Files.readAllBytes(Paths.get(location)), StandardCharsets.UTF_8);
var ee = new ScriptEngineManager().getEngineByName("Nashorn");
scriptTextRaw = "var mainfunc = " + scriptTextRaw;
ee.eval(scriptTextRaw);
Object mainRef = ee.get("mainfunc");
// Second eval pass
ee.eval(mainRef.toString());
var mainInvocable = (ScriptObjectMirror)ee.get("main");
// Invoke main function
Object mainResult = mainInvocable.call(myDataObject);
< /code>
Я открыт для лучших способов получить эту основную ссылку. Тем не менее, большая проблема заключается в том, что анонимные функции, инкапсулированные в сценарии, недоступны. Запуск приведенного выше кода, я получаю: < /p>
Exception in thread "main" :3 ReferenceError: "writeLogEntry" is not defined.
< /code>
Я пробовал несколько вещей, например ,::
Object writeLogEntryRef = (ScriptObjectMirror)ee.get("writeLogEntry");
< /code>
(как после первого, так и второго прохода Eval) < /p>
Но это безуспешно. Я также остановил программу в отладчике после каждого прохода Eval для изучения возвращенного объекта, но я не нахожу никаких ссылок на другие методы. Расположение и запуск сценария, отформатированный как этот? Весь вход ценится.
Подробнее здесь: https://stackoverflow.com/questions/794 ... bfunctions
Nashorn: выполнить скрипт с анонимной функцией уровня корня и подфункциями ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Nashorn: выполнить скрипт с анонимной функцией уровня корня и подфункциями
Anonymous » » в форуме JAVA - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Nashorn: выполнить скрипт с анонимной функцией уровня корня и подфункциями
Anonymous » » в форуме JAVA - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
В чем разница между функцией стрелки и анонимной функцией? [дублировать]
Anonymous » » в форуме Jquery - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
В чем разница между функцией стрелки и анонимной функцией? [дублировать]
Anonymous » » в форуме Javascript - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-