Необязательный аргумент метода, передавая Unit как тип в универсальную черту - PullRequest
0 голосов
/ 27 сентября 2019

Скажем, у меня есть черта:

trait Foo[T] {
    val x: T => Any
}

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

class Bar extends Foo[Unit] {
  override val x = () => "Hello"
}

Приведенный выше код делаетне компилируется («x ничего не перекрывает»).

Есть ли способ заставить эту работу работать в Scala?

1 Ответ

2 голосов
/ 27 сентября 2019

Я думаю, что недоразумение в том, что () не является значением типа Unit, а вместо этого представляет пустой список аргументов.Так что

() => "Hello"

является унарной функцией без аргументов.Однако ваша черта ожидает функцию, которая принимает один аргумент типа Unit.

. Если вы удалите override, который здесь не нужен, вы получите ошибку компилятора, которая укажет вам наэто направление.Если вы замените () на подстановочный знак _ или еще лучше (_: Unit), ваш код скомпилируется.

trait Foo[T] {
    val x: T => Any
}

trait Bar extends Foo[Unit] {
  val x: Unit => Any = (_: Unit) => "Hello"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...