具有优先级隐含的上下文边界的类型错误

Type Error for Context Bounding with Priority Implicits

我有以下问题,我对发生了什么感到困惑:

  1. 我有一个隐式定义的优先级
  2. 我使用这个隐含的优先级来强加上下文绑定
  3. 我用默认字段声明了一个案例 class,它的值被上下文绑定覆盖
  4. 我仍然遇到类型错误

一个最小的工作示例,反映了我正在处理的实际代码。我基本上需要在代码的其他部分隐含优先级:

    // 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]

这是怎么回事?我的理由是,因为我在边界内创建我的默认参数,所以类型应该匹配。我是否遗漏了一些技巧来完成这项工作?

不清楚如何重现您的编译错误

required List[T0]

found List[Int]

您添加的代码

val t = Dog(age = 100)

产生不同的错误

Error: could not find implicit value for evidence parameter of type App.Stringifier[Int]
Error occurred in an application involving default arguments.
    val t = Dog(age = 100)

这是因为您错过了 extends Stringifier[Int]import Double_Stringifier._

trait Int_Stringifier {
  implicit object IntStringifier extends Stringifier[Int] {
    def stringify(lst: List[Int]): String = lst.toString()
  }
}

import Double_Stringifier._

val t = Dog(age = 100) // compiles