如果我想在多行字符串中使用$
符号,我该如何逃避?
val condition = """ ... $eq ... """
$eq
被解析为对变量的引用。如何逃避$
,以便它不会被识别为对变量的引用? (Kotlin M13)
答案 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