我想询问Scala中是否存在任何类型的字符串插值。我已经对这个主题进行了搜索,但是到现在为止我发现没有字符串插值。是否有计划在下一版本中实施?
谢谢!
更新
字符串插值将在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
但是在目前可用的所有内插器上试用documentation。请注意,您可以定义自己的插补器!请尝试this link了解详情。
答案 0 :(得分:22)
它不在(已发布的)scala库中。但是有一个SIP(Scala改进流程)用于添加此功能:
http://docs.scala-lang.org/sips/pending/string-interpolation.html
答案 1 :(得分:14)
你可以做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) !!!!
虽然前者在单个字符串中启用多个插值方面更灵活(因为它可以采用多个参数)。
答案 2 :(得分:7)
我在scala 2.9上使用xml hack
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
答案 3 :(得分:1)
是的,通过编译器插件在当前的scala版本中有字符串插值 见http://jrudolph.github.com/scala-enhanced-strings
答案 4 :(得分:0)
这一天(2016年12月,Scala 2.12,五年后),您可以编写自己的字符串插值
见co.ntextu.al
Contextual是一个小型Scala库,它允许您定义自己的字符串插值器 - 前缀字符串文字,如
uri"https://google.com"
,它们确定如何在运行时和编译时评估它们,同时只编写非常普通的用户代码:没有宏!
例如,contextual/examples/email.scala
允许check at compile time the validity of an email address。
import contextual.examples.email._
email"""info@scala.world"""
import contextual.examples.email._
email"""john.smith@hotmail.com"""