tuxdna
tuxdna

Reputation: 8477

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

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.!()
                   ^

Upvotes: 3

Views: 433

Answers (1)

J&#246;rg W Mittag
J&#246;rg W Mittag

Reputation: 369420

!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 ! ()

Upvotes: 1

Related Questions