使用 jsr-223 从 Kotlin 脚本访问值

Access a value from a Kotlin script using jsr-223

我想知道是否可以使用 jsr-223 从 kotlin 脚本访问变量

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

这里我想访问变量 x,但它似乎求值为 null。

还有其他方法可以从脚本中访问数据吗?

我在这里查看了一些示例:https://github.com/JetBrains/kotlin/tree/master/libraries/examples/kotlin-jsr223-local-example 但我似乎找不到我要找的东西。

通过创建一个 returns 值的函数并调用该函数来解决。

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

另一种选择:eval returns 最后一个表达式执行的结果。

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