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

时间:2015-10-07 13:31:50

标签: string kotlin syntax

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

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

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

3 个答案:

答案 0 :(得分:36)

来自文档

  

原始字符串由三重引号分隔("""),包含否   转义并可以包含换行符和任何其他字符

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

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

或者您可以使用文字表示

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

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

答案 1 :(得分:5)

有趣,但有效:

function loadUnitChanged(event, data) {
  console.log('Event Info: ', event);
  setTimeout(function () {
    $scope.cargoregisters = createArrayFromLoadUnit(data);
    ...any other processing you want to do in this function...      
  }, 2000);           
}

实际上,如果val eq = "\$eq" print("""... $eq ..."""") // just like you asked :D 是一个数字(价格或某个),那么您可能想要单独计算它,并且我建议的额外外部计算不会受到影响。

答案 2 :(得分:1)

如果你提前知道你想要的$ - 变量(比如查询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