Почему в Scala нет интерполяции строк?

Это не просто простуда... Интересно, знает ли кто-нибудь, существует ли фактическая причина дизайна, почему Scala не поддерживает интерполяцию, похожую на Groovy и другие синтаксически лучшие Javas?

например.

var str1 = "World";
var str2 = "Hello, ${str1}";

Ответы

Ответ 1

Предлагаемое решение состоит в том, чтобы опустить пробелы при использовании +.

"a="+a+", b="+b

предложил, что швейцарская раскладка клавиатуры делает это очень естественным, поэтому создатели Scala не чувствуют достаточно боли, чтобы оправдать усложнение langauge в этом направлении:)

Ответ 3

Было сочтено, что дополнительная сложность компилятора, которая возникла бы из-за этого, не стоила бы выигрыша, с одной стороны, и, с другой стороны, его отсутствие не было бы чрезмерно обременительным.

Ответ 4

Я понимаю, что String-интерполяция не нужна, потому что она не намного лаконична, чем конкатенация:

val str2 = "Hello, ${str1}!"
val str2 = "Hello, "+str1+"!"

Утверждая, что оператор "+" на строках должен быть отформатирован без пробела, Мартин Одерски говорит,

С новым соглашением необходимость замены строк (часто выставляются в списках Scala), но все исчезают. Для сравнения:

"test results: ${result1}, ${result2}"

с первой версией выше. Вы сохранили один символ за замена, вряд ли стоит нового соглашения о синтаксисе. Другими словами, Scala синтаксис строковой подстановки написан

"+...+"

вместо

${...}

или другое подобное предложение. С другой стороны, если вы настаиваете на пробелы вокруг +, история становится намного менее убедительной.

Кстати, см. сообщение в блоге: String Interpolation в Scala", где он эмулируется с использованием отражения.

Ответ 7

Scala имеет аналогичную функцию для XML:

val x = doSomeCrazyCalculation
val xml = <foo>{x}</foo>