Рекурсивный неявный параметр - PullRequest
0 голосов
/ 02 мая 2018

Представьте себе следующий код:

trait Converter[T] {
  def convert(value: String): T
}

object Converter {
  implicit val intConverter: Converter[Int] = value => value.toInt
  implicit def optionConverter[T]: Converter[Option[T]] = new OptionConverter[T]
}

class OptionConverter[T](implicit val ev: Converter[T]) extends Converter[Option[T]] {
  ...
}

Как видите, OptionConverter принимает Converter[T] для типа, который он содержит, но компилятор жалуется, потому что когда он пытается скомпилировать OptionConverter, он не знает тип.

Я предполагаю, что это, вероятно, уже решено ... но я не могу найти решение.

Есть идеи?

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете просто принять упакованный Converter как неявный параметр для метода optionConverter:

implicit def optionConverter[T](implicit ev: Converter[T]): Converter[Option[T]] = new OptionConverter[T]

Или стенография:

implicit def optionConverter[T : Converter]: Converter[Option[T]] = new OptionConverter[T]
...