Вот кусок очень простой кусок кода Java, который оценивает некоторые JavaScript код:способность Nashorn передать неопределенные переменные в функции
public static class Logger
{
public log(String line)
{
System.out.println(line);
}
}
public static void main(String[] args)
{
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine(new String[]
{
"-strict",
"--no-java",
"--no-syntax-extensions"
});
engine.put("log", new Logger());
engine.eval(
"var ifExists = function(checkExists, otherwise)" +
"{" +
"if(typeof checkExists !== 'undefined')" +
"{" +
"return checkExists;" +
"}" +
"else" +
"{" +
"return otherwise;" +
"}" +
"};" +
"log.log(ifExists(someVariableThatIsUndefined, 'this string should be returned'));"
);
}
Когда он пытается запустить ifExists (someVariableThatIsUndefined, «эта строка должна быть возвращенным '), двигатель бросает посадку, говоря, что someVariableThatIsUndefined is..well undefined, который побеждает цель метода утилиты для проверки того, что что-то не определено.
Есть ли способ, которым я мог бы передать 'someVariableThatIsUndefined' функции, которая возвращает эту переменную, если она определена иначе, возвращать что-то еще.
Единственное ограничение регулируется Params проанализированного к двигателю "-strict, --no-Java, --no-синтаксис-расширение"