使用Scala进行方法调用的单个中缀

时间:2012-12-08 13:59:13

标签: scala

在Scala中,点符号在很多情况下是可选的,例如1 + 2等于1.+(2)

但是,通过一些魔术,它也可以写出类似的东西:

object u {
  def meth (s: String) = println(s)
  meth "str"  // as shortcut for meth("str")
}

结果:

<console>:3: error: ';' expected but string literal found.

但是如果像这样的东西有效,那么创建内部DSL会非常有趣。 注意:在这个假设的问题中,我不想在u meth "str"之类的东西上画画。

1 个答案:

答案 0 :(得分:3)

您可以使用Scala 2.10中的字符串插值执行类似操作,但我认为您不应该这样做:

scala> implicit class Meth(val sc: StringContext) extends AnyVal {
     |   def meth(): String = "meth" + sc.parts(0)
     | }
defined class Meth

scala> meth"str"
res0: String = methstr

在Scala中无法使用meth "str"之类的表达式。您可以撰写u meth "str""str" methmeth"str"meth ("str"),但不能meth "str"