Это не просто неактивное тонкое замечание... Интересно, знает ли кто-либо, существует ли фактическая причина дизайна, почему Scala не поддерживает интерполяцию, подобную Groovy и другому "синтаксически лучшему Javas"?
например.
var str1 = "World"; var str2 = "Hello, ${str1}";
Предлагаемое решение - опустить пробелы при использовании +
.
"a="+a+", b="+b
Было предложено , что швейцарская раскладка клавиатуры делает это очень естественным для набора текста, поэтому создатели Scala не чувствуют достаточной боли, чтобы оправдать усложнение языка в этом направлении :)
{ {1}}Мне кажется, что строковая интерполяция не нужна, потому что она не намного короче, чем конкатенация:
val str2 = "Hello, ${str1}!"
val str2 = "Hello, "+str1+"!"
Утверждая, что оператор "+" Строки должны быть отформатированы без пробелов, Мартин Одерский говорит ,
С новым соглашением необходимость подстановки строк (часто указывается в списках Scala) почти исчезает. Сравните:
"результаты теста: $ {результат1}, $ {результат2}"
с первой версией выше. Вы сохранили один символ на каждую замену , что вряд ли стоит нового синтаксического соглашения. Другими словами, синтаксис подстановки строк в Scala записывается
"+ ... +"
вместо
$ {...}
или другое подобное предложение. С другой стороны, если вы будете настаивать на пробелах вокруг +, история станет гораздо менее убедительной.
Кстати, см. Сообщение в блоге « String Interpolation in Scala », где это эмулируется с помощью отражения.
Было решено, что дополнительная сложность компилятора, которая возникнет в результате этого, не стоит тех выгод, которые можно получить, с одной стороны, и, с другой стороны, что его отсутствие не будет слишком обременительным.
Scala имеет аналогичную функцию для XML:
val x = doSomeCrazyCalculation
val xml = <foo>{x}</foo>