Kotlin JSR223 引擎传递绑定(bind)

标签 kotlin jsr223

我试图将一个值传递给 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 映射访问变量:

println(绑定(bind)[“ctx”])

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

相关文章:

kotlin - 如何在Intellij中配置Kotlin SDK外部文档?

csv - Jmeter JSR223 Sampler - 无法将数据写入 CSV 文件

javascript - JMeter - 在 JSR223/BeanShell 采样器中调用 HTTP 采样器

testing - 如何在jmeter的循环 Controller 中使用jsr223变量

kotlin - 如何反序列化 Android 中的公共(public)/私有(private) P-384 key ?

kotlin - 如何迭代类层次结构?

android - 使用 SmsRetriever 时接收广播 Intent 时出错

java - Android 谷歌地图 moveCamera 原因 "IllegalStateException: Illegal height"

java - Scala 脚本引擎创建另一个单例实例

java - 从 JavaScript 实现 Java 接口(interface)失败并出现 TypeError