複数行の文字列で$
サインを使用したい場合、どうすればエスケープできますか?
val condition = """ ... $eq ... """
$eq
は、変数への参照として解析されます。変数への参照として認識されないように、$
をエスケープする方法は? (コトリンM13)
ドキュメントから
生の文字列は、三重引用符( "" ")で区切られ、エスケープを含まず、改行やその他の文字を含めることができます
改行付きの標準文字列を使用する必要があります
" ...\n \$eq \n ... "
または、リテラル表現を使用できます
""" ... ${'$'}eq ... "
s: http://kotlinlang.org/docs/reference/basic-types.html#string-literals
おかしいが、それはうまくいく:
val eq = "\$eq"
print("""... $eq ..."""") // just like you asked :D
実際、eq
が数値(価格、またはsth)である場合、おそらく個別に計算する必要がありますが、追加の外部計算は問題ありません。
事前に知っている場合$
-必要な変数(Mongoを照会するときなど、実行しているように見える場合)で、これらの変数を定義する小さなヘルパーオブジェクトを作成できます。また、オペレーターの1つを誤ってスペルミスから保護することもできます。
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