Почему в Scala нет интерполяции строк? - PullRequest
11 голосов
/ 20 марта 2010

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

например.

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

Ответы [ 8 ]

18 голосов
/ 26 февраля 2011

Строковая интерполяция в Scala 2.10. См. SIP .

Если вы используете более раннюю версию Scala, есть также плагин ScalaEnhancedStrings .

16 голосов
/ 20 марта 2010

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

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

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

7 голосов
/ 07 ноября 2012

Начиная с Scala 2.10.0, Scala поддерживает интерполяцию строк

Пример:

val name = "James"
println(s"Hello, $name")  // Hello, James
7 голосов
/ 20 марта 2010

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

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

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

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

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

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

"+...+"

вместо

${...}

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

Кстати, см. Сообщение в блоге " Интерполяция строк в Scala "он эмулируется с помощью отражения.

7 голосов
/ 20 марта 2010

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

6 голосов
/ 12 октября 2011

Интерполяция строк в настоящее время добавляется в Scala в транке, см. этот коммит Мартина, поэтому он, вероятно, будет доступен в Scala 2.10. См. Также первый тестовый пример для примера: https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/run/stringInterpolation.scala

1 голос
/ 20 марта 2010

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

val x = doSomeCrazyCalculation
val xml = <foo>{x}</foo>
0 голосов
/ 03 мая 2011

Учтите, что литерал XML вычисляется только один раз. См. Заполнитель многострочных строк Scala для варианта вопроса о многострочных строках.

...