Шаблоны, выходящие в многострочные строки Котлина

Если я хочу использовать знак $ в многострочных строках, как мне его избежать?

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

$eq анализируется как ссылка на переменную. Как избежать $ , чтобы он не был признан ссылкой на переменную? (Котлин М13)

Из документации

Необработанная строка разделяется тройной цитатой ("" "), не содержит экранирования и может содержать символы новой строки и любой другой символ

Вам нужно будет использовать стандартную строку с символами новой строки

 " ...\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, как вы думаете, возможно, вы можете создать небольшой вспомогательный объект, который определяет эти переменные. Вы также получаете некоторую защиту от случайного опечатка одного из ваших операторов, который является опрятным.

 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}}""" } } 

Я написал простые версии для строк обновлений и запросов для монго: https://gist.github.com/Yona-Appletree/29be816ca74a0d93cdf9e6f5e23dda15