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

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

например.

var str1 = "World";
var str2 = "Hello, ${str1}";
11
задан Alex R 20 March 2010 в 01:05
поделиться

4 ответа

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

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

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

{ {1}}
16
ответ дан 3 December 2019 в 00:46
поделиться

Мне кажется, что строковая интерполяция не нужна, потому что она не намного короче, чем конкатенация:

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

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

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

 "результаты теста: $ {результат1}, $ {результат2}" 
 

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

 "+ ... +" 
 

вместо

 $ {...} 
 

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

Кстати, см. Сообщение в блоге « String Interpolation in Scala », где это эмулируется с помощью отражения.

7
ответ дан 3 December 2019 в 00:46
поделиться

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

7
ответ дан 3 December 2019 в 00:46
поделиться

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

val x = doSomeCrazyCalculation
val xml = <foo>{x}</foo>
1
ответ дан 3 December 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: