$bang() res3: java.lang.String = hi But thi" /> $bang() res3: java.lang.String = hi But thi" /> $bang() res3: java.lang.String = hi But thi"/>

I can define a bang operator method, but I can't call it in Scala. Why?

417 views Asked by At

First I define ! method:

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

Now I can call it like so:

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

But this doesnt' work:

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

Even this doesn't work:

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

What am I doing wrong here? Why am I allowed to define !() when I can't invoke it?

EDIT1

Adding an object reference gives error:

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

There are 1 answers

2
Jörg W Mittag On
!foo

is interpreted as

foo.unary_!

If you want to call your method, you must specify an explicit receiver, e.g.

this.!()

or

this !()

or

this ! ()