代码之家  ›  专栏  ›  技术社区  ›  Suma

如何实现递归泛型的类型类?

  •  1
  • Suma  · 技术社区  · 7 年前

    我想使用类型类为泛型类提供专门的实现。问题是这个类是递归的,我没有找到一种方法来编写代码,这样就可以正常工作了。以下是我的尝试:

    object Compare {
      trait Compare[T <: Compare[T]] {
        def compare(that: T): Boolean
      }
    
      trait IsCompare[T] {
        def check: Boolean
      }
    
      trait LowerLevelImplicits {
        implicit def defaultCompare[T]: IsCompare[T] = new IsCompare[T] {
          def check = false
        }
      }
    
      trait Implicits extends LowerLevelImplicits {
        implicit def isCompare[T: Compare]: IsCompare[T] = new IsCompare[T] {
          def check = true
        }
      }
    
      case class MyClass(value: Int) extends Compare[MyClass] {
        override def compare(that: MyClass) = this equals that
      }
    }
    
    import Compare._
    
    object Main extends App with Implicits {
    
      def matchArray[T: IsCompare](array: Array[T]) = {
        if (implicitly[IsCompare[T]].check) {
          println("Using isCompare")
        } else {
          println("Not using isCompare")
        }
      }
    
    
    }
    

    错误是:

    错误:(17,29)类型参数[T]不符合trait Compare的类型参数界限[T<:比较。比较[T]]

    implicit def isCompare[T: Compare]: IsCompare[T] = new IsCompare[T] {
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Bogdan Vakulenko    7 年前

    试着改变 isCompare 的方法签名:

    implicit def isCompare[T <: Compare[T]]: IsCompare[T] = //...
    
    推荐文章