Si je veux utiliser le signe $
dans des chaînes multilignes, comment puis-je y échapper?
val condition = """ ... $eq ... """
$eq
est analysé comme une référence à une variable. Comment échapper à $
, pour qu'il ne soit pas reconnu comme référence à une variable? (Kotlin M13)
De la documentation
Une chaîne brute est délimitée par un guillemet triple ("" "), ne contient pas D'échappement et peut contenir des nouvelles lignes et tout autre caractère.
Vous devez utiliser une chaîne standard avec des nouvelles lignes.
" ...\n \$eq \n ... "
ou vous pouvez utiliser la représentation littérale
""" ... ${'$'}eq ... "
s: http://kotlinlang.org/docs/reference/basic-types.html#string-literals
C'est marrant, mais ça marche:
val eq = "\$eq"
print("""... $eq ..."""") // just like you asked :D
En fait, si eq
est un nombre (un prix, ou qch), alors vous voudrez probablement le calculer séparément, et un calcul externe supplémentaire, comme je l’ai suggéré, ne fera pas de mal.
Si vous savez à l'avance quelles sont les variables $
- que vous souhaitez (par exemple, lorsque vous interrogez Mongo, vous pouvez le faire), vous pouvez créer un petit objet d'assistance définissant ces variables. Vous bénéficiez également d'une certaine protection contre les fautes d'orthographe accidentelles de l'un de vos opérateurs, ce qui est pratique.
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}}""" }
}
J'ai écrit des versions simples pour les chaînes de mise à jour et de requête pour Mongo ici: https://Gist.github.com/Yona-Appletree/29be816ca74a0d93cdf9e6f5e23dda15