nto*_*rnl 33 string syntax kotlin
如果我想使用$
登录多行字符串,我该如何逃避呢?
val condition = """ ... $eq ... """
Run Code Online (Sandbox Code Playgroud)
$eq
被解析为对变量的引用.如何逃避$
,以便它不会被识别为变量的引用?(Kotlin M13)
Jer*_*man 46
从文档中
原始字符串由三引号(""")分隔,不包含转义,可以包含换行符和任何其他字符
您需要使用带换行符的标准字符串
" ...\n \$eq \n ... "
Run Code Online (Sandbox Code Playgroud)
或者您可以使用文字表示
""" ... ${'$'}eq ... "
Run Code Online (Sandbox Code Playgroud)
s:http://kotlinlang.org/docs/reference/basic-types.html#string-literals
有趣,但是可行:
val eq = "\$eq"
print("""... $eq ..."""") // just like you asked :D
Run Code Online (Sandbox Code Playgroud)
实际上,如果eq
是一个数字(一个价格或某物),那么您可能要单独计算它,并且我建议的其他外部计算不会受到影响。
如果你提前知道$
你想要什么-variables(比如在查询 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}}""" }
}
Run Code Online (Sandbox Code Playgroud)
我在这里为 mongo 编写了简单版本的更新和查询字符串:https : //gist.github.com/Yona-Appletree/29be816ca74a0d93cdf9e6f5e23dda15