我可以在 kotlin 中转换模板表达式中的字符串或 lambda 表达式吗?
val tm = "x = $"+"x"
val fn: (x: String) -> String = { it -> tm}
val str = fn("This is X!!!")
需要获取
x = This is X!!!
为什么?:例如,您可以从数据库接收模板 PS:或者您的建议
最佳答案
Kotlin 模板在编译时进行评估 - 所以这不起作用。
您应该使用第三方模板引擎。
Freemarker就是这样一个格式与Kotlin自己的模板格式非常相似的引擎:
val tm = "x = \${x}"
fun fn (x: String) : String {
val t = Template("name", StringReader(tm), Configuration(Configuration.VERSION_2_3_26))
val out = StringWriter()
t.process(mapOf("x" to x) ,out)
return out.toString()
}
println (fn("This is X!!!")) // x = This is X!!!
两个注意事项:
- 您将无法在 freeMarker 上使用
"$x"
,只能使用"${x}"
可以使用 $
符号
\$
在 Kotlin 字符串中转义 关于lambda - 我可以在 kotlin 中转换模板表达式或 lambda 表达式中的字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45799829/