我可以在kotlin中转换模板表达式或lambda表达式中的字符串吗?

时间:2017-08-21 14:36:30

标签: lambda kotlin

我可以在kotlin中的模板表达式或lambda表达式中转换字符串吗?

val tm = "x = $"+"x"
val fn: (x: String) -> String = { it -> tm}
val str = fn("This is X!!!")

需要获得

  

x =这是X !!!

为什么?:您可以从数据库接收模板 PS:或你的建议

1 个答案:

答案 0 :(得分:2)

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字符串中进行转义