Как мне написать функцию как бинарный оператор? - PullRequest
0 голосов
/ 26 апреля 2019

В моей программе Scala у меня есть тип данных Foo, и я хочу написать для него двоичный оператор >>.

Вот пример кода.

class Foo {}

object BinaryOps {
  def >>(f1: Foo, f2: Foo): Foo = ???

  def main(args: Array[String]): Unit = {
    val f1 = new Foo()
    val f2 = new Foo()
//  val f3 = f1 >> f2   // Error: cannot resolve symbol >>
    val f4 = >>(f1, f2) // works, but I want the binary op syntax.

//  val f5 = f1 >> f2 >> f3 >> f4   // ultimate goal is to be able to chain calls.
  }
}

Пока что моя IDE показывает мне, что не может разрешить символ >>, то есть компилятор не пытается использовать его в качестве бинарного оператора.

Как я могу изменить его, чтобы найти символ иможет использоваться как бинарный оператор?

Редактировать : что делать, если Foo нельзя изменить?что если это может?

1 Ответ

3 голосов
/ 26 апреля 2019

Форма f1 >> f2 фактически означает f1.>>(f2), что означает, что Foo должен иметь такой метод.

class Foo {
  def >>(that :Foo) :Foo = ???
  ...

Если Foo нельзя изменить, вы можете создать неявное преобразование.

implicit class FooOps(thisfoo :Foo) {
  def >>(thatfoo :Foo) :Foo = ???
}

Теперь f1 >> f2 должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...