Kotlin JSR223引擎传递绑定

Kotlin JSR223引擎传递绑定,kotlin,jsr223,Kotlin,Jsr223,我试图在JSR223引擎上向我的kotlin脚本传递一个值,但它没有得到绑定 class Script<C : ScriptContext>(val scriptClass : KClass<C>, val script : String?) { fun execute(context : C) { if (script != null) { System.setProperty("idea.use.native.fs.fo

我试图在JSR223引擎上向我的kotlin脚本传递一个值,但它没有得到绑定

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)
            }

        }
    }    
}

我错过了什么?

还不支持绑定变量的直接映射。这件事有点不对劲。 现在,您可以通过
绑定
映射访问变量:


println(绑定[“ctx”])

更新:自Kotlin 1.3.50以来,绑定按预期工作,不需要绑定[]引用@你能解释一下吗?我无法在JMeter中使用绑定JSR223@Balage1551我在Kotlin-1.4.21上遇到了一个问题:-(。可能我必须配置一些东西。您使用什么javax.script.ScriptEngineFactory,以及什么依赖项?
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)
...