Доступ к значению из скрипта Kotlin с помощью jsr-223

Мне интересно, можно ли получить доступ к переменным из скрипта kotlin с помощью jsr-223

with(ScriptEngineManager().getEngineByExtension("kts")!!) {
        eval("val x = 3")
        val x = get("x")
        println(x) <---------- x is null
    }

Здесь я хочу получить доступ к переменной x, но, похоже, она равна нулю.

Есть ли другой способ доступа к данным из скрипта?

Я рассмотрел несколько примеров здесь: https://github.com/JetBrains/kotlin/tree/master/libraries/examples/kotlin-jsr223-local-example, но я не могу найти то, что ищу.


person Andreas    schedule 14.08.2019    source источник


Ответы (2)


Решается путем создания функции, которая возвращает значение, и вызова этой функции.

with(ScriptEngineManager().getEngineByExtension("kts")!!) {
        eval("fun getX() = 3")
        val invocator = this as? Invocable
        val x = invocator!!.invokeFunction("getX")
        println(x) <---------- x is 3
}
person Andreas    schedule 16.08.2019

Другая альтернатива: eval возвращает результат последнего выполненного выражения.

with(ScriptEngineManager().getEngineByExtension("kts")!!) {
        val x = eval("1 + 2")
        println(x) <---------- x is 3
}
person RoToRa    schedule 23.05.2021