模板在Kotlin多行字符串中转义

问题描述 投票:24回答:3

如果我想在多行字符串中使用$符号,我该如何逃避呢?

val condition = """ ... $eq ... """

$eq被解析为对变量的引用。如何逃避$,以便它不会被识别为变量的引用? (Kotlin M13)

string kotlin syntax
3个回答
37
投票

从文档中

原始字符串由三引号(“”“)分隔,不包含转义,可以包含换行符和任何其他字符

您需要使用带换行符的标准字符串

" ...\n \$eq \n ... "

或者您可以使用文字表示

""" ... ${'$'}eq ... "

S:http://kotlinlang.org/docs/reference/basic-types.html#string-literals


6
投票

有趣,但有效:

val eq = "\$eq"

print("""... $eq  ..."""")   // just like you asked :D

实际上,如果eq是一个数字(价格,或者......),那么你可能想要单独计算它,并且我建议的额外外部计算不会受到伤害。


2
投票

如果你提前知道你想要什么$变量(比如查询Mongo,看起来你可能正在做),你可以创建一个定义这些变量的小助手对象。您还可以获得一些保护,防止意外拼错您的一个操作员,这很简洁。

object MongoString {
    inline operator fun invoke(callback: MongoString.() -> String) = callback()

    val eq = "\$eq"
    val lt = "\$lt"
    // ... and all the other operators ...
}

fun test() {
    val query = MongoString { """{"foo": {$lt: 10}}""" }
}

我在这里为mongo写了更新和查询字符串的简单版本:https://gist.github.com/Yona-Appletree/29be816ca74a0d93cdf9e6f5e23dda15

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.