这不仅仅是一个空闲的讽刺......我想知道是否有人知道Scala不支持类似于Groovy和其他“语法上更好的Javas”的插值是否存在实际设计原因?
e.g。
var str1 = "World"; var str2 = "Hello, ${str1}";
答案 0 :(得分:18)
字符串插值在Scala 2.10中。请参阅SIP。
如果您使用的是早期的Scala版本,那么还有ScalaEnhancedStrings compiler plugin。
答案 1 :(得分:16)
建议的解决方案是在使用+
时省略空格。
"a="+a+", b="+b
一直是suggested瑞士键盘布局使这种键入非常自然,因此Scala的创作者不会感到足够的痛苦来证明在这个方向上使语言变得复杂:)
答案 2 :(得分:7)
认为由此产生的额外编译器复杂性一方面不值得获得,另一方面,它的缺席不会过于繁琐。
答案 3 :(得分:7)
我觉得字符串插值是不必要的,因为它不比连接简洁得多:
val str2 = "Hello, ${str1}!"
val str2 = "Hello, "+str1+"!"
争论字符串上的“+”运算符应格式化为没有空格Martin Odersky says,
使用新约定,需要字符串替换(通常 提出Scala列表)几乎消失了。比较:
"test results: ${result1}, ${result2}"
上面的第一个版本。你已经保存了一个角色 替换,几乎不值得新的语法约定。换一种说法, Scala的字符串替换语法是写的
"+...+"
而不是
${...}
或其他类似的提案。另一方面,如果你坚持 +周围的空间,故事变得不那么令人信服了。
顺便提一下,请参阅博客文章“String Interpolation in Scala”,其中使用反射进行模拟。
答案 4 :(得分:7)
从Scala 2.10.0开始,Scala执行support String Interpolation
示例:
val name = "James"
println(s"Hello, $name") // Hello, James
答案 5 :(得分:6)
字符串插值当前正被添加到主干中的Scala,请参阅Martin的this commit,因此它可能在Scala 2.10中可用。另请参阅示例的第一个测试用例:https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/run/stringInterpolation.scala
答案 6 :(得分:1)
Scala确实有类似的XML功能:
val x = doSomeCrazyCalculation
val xml = <foo>{x}</foo>
答案 7 :(得分:0)
考虑只对XML文字进行一次评估。有关处理多行字符串的问题变体,请参阅Scala multiline string placeholder。