2016-11-29 13 views
1

Я погружаюсь в функцию интерполяции строк Scala, и мне интересно, можно ли ее использовать. Строчная интерполяция позволяет оценить выражение, подобное:Scala string интерполяция и оценка выражения

println(s"Hello World! ${for (i <- 1 to 100) println(s"other values $i")}") 

Я сомневаюсь, что мы должны оценить выражение в интерполированной строке. Я вижу много кода Scala, где другие разработчики используют эту функцию, как в примере, и не знают, правильно ли это и безопасно.

+0

Это синтаксически правильный, но выглядит очень некрасиво. Вы уверены, что будете использовать этот код в производстве и с удовольствием поддерживаете это? это безопасно использовать. – Pavel

+0

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

+0

Вы спрашиваете, может ли какой-нибудь фактический код scala быть в этой оценке? генерация кода и т.д.? В этом случае я предполагаю, что может возникнуть проблема, если оценка не удастся, к сложным вопросам. Не уверен, насколько это практично. – Pavel

ответ

4

Я бы никогда не использовал его, и я бы не хотел, чтобы мои коллеги его использовали.

Две вещи в основном от:

  • Строка интерполяции хорошая особенность, потому что она делает конкатенацию значений легко читать ... если вы не придерживаться всю программу SCALA там :)
  • Не только там есть сложное выражение, но вы используете побочный эффект, поэтому в процессе оценки интерполяции будут напечатаны 100 значений. Таким образом, вы получите

    other values 1 
    other values 2 
    ... 
    other values 100 
    Hello World!() 
    

() Если это возвращаемое значение для понимания-, т.е. Unit.

я бы сохранить себя (и моих коллег) огромные головные боли и просто сделать

println(s"Hello World!") 
for (i <- 1 to 100) { 
    println(s"other values $i") 
} 
+0

Является ли интерполяция строк одинаковой для простой статической конкатенации строк? – PawelN

+0

Конкатенация строк быстрее, поэтому, если это ваше узкое место, используйте его вместо интерполяции. Разница в большинстве случаев невелика, но, как всегда, выбирайте в соответствии с вашими требованиями. См. Http://yosoyu.com/index.php/2015/03/14/string-interpolation-vs-string-concatenation/ –