Двигатель Kotlin JSR223, проходящий крепления - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь передать значение в свой скрипт kotlin на движке JSR223, но он не получает привязок.

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

Что я пропустил?

1 Ответ

0 голосов
/ 30 октября 2018

Прямое отображение переменных привязки пока не поддерживается. В этом есть проблема . На данный момент вы можете получить доступ к переменным через карту bindings:

println(bindings["ctx"])

...