我有以下问题,我对发生的事情感到困惑:
- 我有一个隐式定义的优先级
- 我使用此优先级隐式来强加上下文绑定
- 我声明了一个带有默认字段的案例类,该字段的值被上下文绑定所覆盖
- 我仍然收到类型错误
一个反映我正在处理的实际代码的最小工作示例。我基本上需要在我的代码的其他部分隐含优先级:
// priority implicits
sealed trait Stringifier[T] {
def stringify(lst: List[T]): String
}
trait Int_Stringifier {
implicit object IntStringifier {
def stringify(lst: List[Int]): String = lst.toString()
}
}
object Double_Stringifier extends Int_Stringifier {
implicit object DoubleStringifier extends Stringifier[Double] {
def stringify(lst: List[Double]): String = lst.toString()
}
}
object Example extends App {
trait Animal[T0] {
def incrementAge(): Animal[T0]
}
case class Dog[T0: Stringifier]
(age: Int = 0, locations: List[T0] = List(1, 2, 3)) extends Animal[String] {
def incrementAge(): Dog[T0] = this.copy(age = age + 1)
}
}
val t = Dog(age = 100)
我收到类型不匹配错误:
required List[T0]
found List[Int]
这里发生了什么?我推断,由于我在边界内创建默认参数,因此类型应该匹配。我在这里错过了一些技巧来完成这项工作吗?