Skip to content

脚本引擎

标签
Pouvoir
字数
110 字
阅读时间
1 分钟
kotlin
@AutoRegister
@RuntimeDependencies(
    RuntimeDependency("org.codehaus.groovy:groovy-jsr223:3.0.11"),
    RuntimeDependency("org.codehaus.groovy:groovy:3.0.11")
)
object PouGroovyScriptEngine : PouScriptEngine() {
    override val key: String = "groovy"
    override val suffixes: Array<String> = arrayOf("groovy")
    override val functionPattern: Pattern = Pattern.compile("^def (?<name>.*)\\(.*\\)(| +)\\{\$")
    override val bridge: ScriptBridge = GroovyBridge

    private val factory: ScriptEngineFactory by lazy(LazyThreadSafetyMode.NONE) { GroovyScriptEngineFactory() }
    override val engine: ScriptEngine
        get() = factory.scriptEngine
}

object GroovyBridge : ScriptBridge {
    override fun getEngine(vararg args: String): ScriptEngine = PouGroovyScriptEngine.engine
    override fun buildInvoker(script: CompiledScript): Invoker {
        return Invoker { function, arguments, parameters, receiver ->
            script.eval()
            script.engine.context.getBindings(ScriptContext.ENGINE_SCOPE).putAll(arguments)
            return@Invoker (script.engine as Invocable).invokeFunction(
                function,
                *parameters
            )
        }
    }

    override fun toObject(any: Any): Any? {
        return null
    }
}

贡献者

The avatar of contributor named as Glomzzz Glomzzz
The avatar of contributor named as Glom-c Glom-c

页面历史