Строковая интерполяция в Scala? - PullRequest
15 голосов
/ 27 октября 2011

Я хотел спросить, есть ли какой-либо тип интерполяции строк в Scala. Я сделал поиск по этому вопросу, но «до сих пор я обнаружил, что нет интерполяции строк. Есть ли планы по внедрению в следующих версиях?

Спасибо!

UPDATE

Строковая интерполяция будет в Scala 2.10, которую вы можете попробовать, так как Scala 2.10.RC1 вышла (20/10/2012). Вы можете проверить это SIP для Scala 2.11, в котором говорится, что интерполированные строки в сопоставителе шаблонов будут действительным синтаксисом. С новой интерполяцией строк вы можете сделать что-то вроде этого:

val age = 28
val name = "Gerry"

s"My name is $name and I am $age years old"
res0: String = My name is Gerry and I am 28 years old

Но попробуйте документацию на всех интерполяторах, доступных на данный момент. Обратите внимание, что вы можете определить свои собственные интерполяторы! Попробуйте эту ссылку для получения дополнительной информации.

Ответы [ 5 ]

22 голосов
/ 27 октября 2011

Его еще нет в (выпущенной) библиотеке scala. Но для добавления этой функции есть SIP (Scala Improvement Process):

http://docs.scala -lang.org / sips / pending / string-interpolation.html

14 голосов
/ 27 октября 2011

Вы можете сделать это в стиле C:

"Interpolate my %s here" format List(1,2,3)

//String = Interpolate my List(1, 2, 3) here

или

List(1,2,3) formatted "Interpolate my %s here"

Вы можете использовать их для чего угодно с toString (то есть что угодно)

case class Foo(n: Int)
Foo(42) formatted "Here is a %s !!!!"
//String = Here is a Foo(42) !!!!

хотя первый более гибкий с точки зрения включения нескольких интерполяций в одной строке (поскольку он может принимать несколько аргументов).

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

Я использую XML-хак на Scala 2.9

val age = 28
val name = "Gerry"

<a>My name is {name} and I am {age} years old</a>.text
res0: String = My name is Gerry and I am 28 years old
1 голос
/ 02 ноября 2011

да, в текущих версиях Scala есть интерполяция строк через плагин компилятора, см. http://jrudolph.github.com/scala-enhanced-strings

0 голосов
/ 26 декабря 2016

В эти дни (декабрь 2016 г., Scala 2.12, пять лет спустя) вы можете написать собственную интерполяцию строк.
См. co.ntextu.al

Contextual - это небольшая библиотека Scala, которая позволяет вам определять свои собственные строковые интерполяторы - префиксные строковые литералы, такие как uri"https://google.com", которые определяют, как они должны оцениваться, во время выполнения и во время компиляции, при этом только писать очень обычный пользовательский код: нет макросов!

Например, contextual/examples/email.scala позволяет проверять во время компиляции действительность адреса электронной почты .

import contextual.examples.email._
email"""info@scala.world"""

import contextual.examples.email._
email"""john.smith@hotmail.com"""
...