gpt4 book ai didi

Kotlin JSR223 引擎传递绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 13:22:25 24 4
gpt4 key购买 nike

我正在尝试将值传递给 JSR223 引擎上的 kotlin 脚本,但它没有获取绑定(bind)。

class Script<C : ScriptContext>(val scriptClass : KClass<C>, val script : String?) {
fun execute(context : C) {
if (script != null) {
System.setProperty("idea.use.native.fs.for.win", "false")
val scriptWithContext = """
import ${scriptClass.java.canonicalName}

println(ctx)
""".trimIndent()
with(ScriptEngineManager().getEngineByExtension("kts")) {
val c = SimpleScriptContext()
c.setAttribute("ctx", context, javax.script.ScriptContext.ENGINE_SCOPE)
eval(scriptWithContext, c)
}

}
}
}

它抛出异常:
Exception in thread "main" javax.script.ScriptException: error: unresolved reference: ctx
println(ctx)
^

at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.compileAndEval(KotlinJsr223JvmScriptEngineBase.kt:65)
at org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineBase.eval(KotlinJsr223JvmScriptEngineBase.kt:31)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
...

我错过了什么?

最佳答案

尚不支持绑定(bind)变量的直接映射。有一个issue关于它。
现在,您可以通过 bindings 访问变量。 map :

println(bindings["ctx"])

关于Kotlin JSR223 引擎传递绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53062392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com