kotlin - 如何从文本文件中读取和转换 Kotlin DSL 定义?
问题描述
我在静态文本文件中有我的 Kotlin DSL 定义,否则用户将在运行时将这些 DSL 定义作为文本内容提供。如何将这些文本内容动态转换为 Kotlin 定义?因此该程序可以理解为 DSL 对象实例。
解决方案
您可以为此使用 Kotlin 脚本引擎。
为此需要以下软件包:
org.jetbrains.kotlin:kotlin-script-util
org.jetbrains.kotlin:kotlin-compiler-embeddable
然后您必须创建META-INF/services/javax.script.ScriptEngineFactory
具有以下内容的文件:
org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory
设置完成后,您可以使用脚本引擎在应用程序中编译和运行 Kotlin 脚本,如下面的小示例所示:
with(ScriptEngineManager().getEngineByExtension("kts")) {
val script =
"""
"Hello World"
""".trimIndent()
val scriptResult = eval(script)
return scriptResult as String
}
有关如何使用脚本引擎的更多详细信息,请参阅Kotlin JSR223 示例。
推荐阅读
- r - 求字符串序列之间的汉明距离
- java - 火花数据框/数据集上的自定义排序顺序
- c# - ASP.NET Core MVC 模型 - SqlException 无法为标识列插入显式值
- django - 注销后销毁令牌
- swagger-ui - 使用 swagger ui 从 OpenAPI 规范导出 API 路径列表
- javascript - 有没有办法将长度大于 15 的字符串转换为数字,而不进行四舍五入?
- c - 在数组中查找最小偶数和最大偶数
- java - 如何故意让 kubernetes 的工作失败?
- grouping - 如何在列表和标签中为多个级别的组创建小计
- javascript - Modernizr 的问题 -> ReferenceError:Modernizr 未定义(Firefox 控制台)