我可以定义一个bang运算符方法,但我无法在Scala中调用它。为什么?

时间:2014-10-13 10:56:31

标签: scala scala-2.9

首先我定义!方法:

scala> def !() = "hi"
$bang: ()java.lang.String

现在我可以这样称呼它:

scala> $bang()
res3: java.lang.String = hi

但这不起作用:

scala> !()
<console>:8: error: value unary_! is not a member of Unit
              !()

即使这不起作用:

scala> `!`()
<console>:8: error: value unary_! is not a member of Unit
              `!`()
              ^

我在这里做错了什么?当我无法调用时,为什么我可以定义!()

EDIT1

添加对象引用会出错:

scala> this.!()
<console>:8: error: value ! is not a member of object $iw
              this.!()
                   ^

1 个答案:

答案 0 :(得分:1)

!foo

被解释为

foo.unary_!

如果要调用方法,则必须指定显式接收器,例如

this.!()

this !()

this ! ()