我可以转换模板表达式中的字符串还是kotlin中的lambda表达式?
我可以转换模板表达式中的字符串还是kotlin中的lambda表达式?
val tm = "x = $"+"x" val fn: (x: String) -> String = { it -> tm} val str = fn("This is X!!!")
需要得到
x =这是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字符串中转义