简体   繁体   中英

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

is interpreted as

foo.unary_!

If you want to call your method, you must specify an explicit receiver, eg

this.!()

or

this !()

or

this ! ()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM