使用 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
}
我想知道是否可以使用 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
}