如何确定 2 个以上案例的隐式优先级



我最近在这里介绍了确定隐式优先级的技术:链接

现在,我试图将其推广到隐式数量> 2 的情况。

从这里的这个答案来看,它说我可以通过创建特征层次结构来做到这一点:链接

以下是我想优先考虑隐式的一些代码:

object Example extends App {
sealed trait Serializer[T] {
def serialize(seq: List[T]): String
}
implicit object StringSerializer extends Serializer[String] {
def serialize(seq: List[String]): String = seq.toString()
}
implicit object IntSerializer extends Serializer[Int] {
def serialize(seq: List[Int]): String = seq.toString()
}
implicit object FloatSerializer extends Serializer[Float] {
def serialize(seq: List[Float]): String = seq.toString()
}
case class Marker[T: Serializer](lst: Option[List[T]] = None)

Marker() // ambiguous implicit values: here...
}

在这种情况下,我如何强加浮点> Int> String 的隐式优先级?

我的尝试如下:

trait A {
implicit object StringSerializer extends Serializer[String] {
def serialize(seq: List[String]): String = seq.toString
}
}

trait B extends A {
implicit object IntSerializer extends Serializer[Int] {
def serialize(seq: List[Int]): String = seq.toString
}
}
trait C extends B {
implicit object FloatSerializer extends Serializer[Float] {
def serialize(seq: List[Float]): String = seq.toString
}
}

但这没有用。查看代码,我可以看到我没有正确执行,但我不确定如何继续。

任何指导将不胜感激。

例如,你可以做

val c = new C {}
import c._
Marker() //compiles

object c extends C
import c._
Marker() //compiles

或者使C成为对象而不是特征

object C extends B {
implicit object FloatSerializer extends Serializer[Float] {
def serialize(seq: List[Float]): Value = ???
}
}
import C._
Marker() //compiles

如果您C对象并将其重命名为Serializer(因此C成为特征Serializer的配套对象(,那么您将不必进行导入

object Serializer extends B {
implicit object FloatSerializer extends Serializer[Float] {
def serialize(seq: List[Float]): Value = ???
}
}
Marker() //compiles

Scala 在哪里寻找隐式?

Scala 在哪里寻找隐式?

相关内容

  • 没有找到相关文章

最新更新