想象一下以下代码:
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
时,它不知道类型。< / p>
我想这可能已经解决了......但我无法找到解决方案。
有什么想法吗?
答案 0 :(得分:2)
您可以接受包裹的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]