在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"
之类的东西上画画。
答案 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" meth
,meth"str"
或meth ("str")
,但不能meth "str"
。