1

在 Scala 中,点表示法在很多情况下是可选的,例如1 + 2equals 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".

4

1 回答 1

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

不可能像meth "str"在 Scala 中那样使用表达式。您可以写u meth "str",或"str" meth,但不能。meth"str"meth ("str")meth "str"

于 2012-12-08T14:14:27.940 回答