Scala字符串模板

时间:2011-06-04 13:12:31

标签: templates scala core template-engine

是否存在字符串模板的默认(在SDK中)scala支持?示例:“$ firstName $ lastName”(命名为未编号的参数)或甚至类似for / if的构造。如果没有这样的默认引擎,那么实现这一目标的最佳scala库是什么。

5 个答案:

答案 0 :(得分:9)

如果你想要一个模板引擎,我建议你看一下scalate。如果您只需要字符串插值,"%s %s".format(firstName, lastName)就是您的朋友。

答案 1 :(得分:5)

补充Kim's answer,请注意Java的Formatter接受位置参数。例如:

"%2$s %1$s".format(firstName, lastName)

此外,还有Enhanced Strings插件,它允许在字符串上嵌入任意表达式。例如:

@EnhanceStrings // enhance strings in this scope
trait Example1 {
  val x = 5
  val str = "Inner string arithmetics: #{{ x * x + 12 }}"
}

有关更多答案,请参阅此question,因为这实际上是一个非常接近的重复。

答案 2 :(得分:3)

在Scala 2.10及更高版本中,您可以使用string interpolation

val name = "James"
println(s"Hello, $name")  // Hello, James

val height = 1.9d
println(f"$name%s is $height%2.2f meters tall")  // James is 1.90 meters tall

答案 3 :(得分:1)

这个编译器插件提供了一段时间的字符串插值:

http://jrudolph.github.com/scala-enhanced-strings/Overview.scala.html

最近,该功能似乎正在进入scala主干:https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/run/stringInterpolation.scala - 这会产生一些有趣的可能性:https://gist.github.com/a69d8ffbfe9f42e65fbf(不确定这些插件是否可行;我怀疑它。)

答案 4 :(得分:-1)

使用非常受欢迎的+" / "+进行模板化,如下所示:

firstname+" "+lastName