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

标签 lambda kotlin

我可以在 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/

相关文章:

android - 绑定(bind)无法转换为导航时的绑定(bind)错误

android - Kotlin android 扩展 fragment View null

java - 如何使用对象属性作为方法参数来设置映射键?

C++ lambda 两次复制构造函数调用

c++ - Qt 信号 lambda 导致 shared_ptr 泄漏?

kotlin - 在 Javalin 处理程序中调用时,Junit 断言不起作用

使用 Kotlin 进行 Gson 反序列化,未调用初始化程序 block

android - 如何从 Kotlin 的内部类访问外部类的成员?

c# - lambda 的保护检查

java - 如何使用 lambda 转换源代码?