Я могу определить метод оператора взрыва, но я не могу вызвать его в Scala. Зачем?

Сначала я определяю ! метод:

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 ответ

!foo

интерпретируется как

foo.unary_!

Если вы хотите вызвать свой метод, вы должны указать явный получатель, например

this.!()

или же

this !()

или же

this ! ()
Другие вопросы по тегам