簡體   English   中英

如何解決類型的Diverging隱式展開

[英]How can I solve the Diverging implicit expansion for type

我想讓我的案例類Event[K, V]始終按鍵K排序。 但是我需要能夠比較不同值V事件。 如何解決這種分散的隱式擴展?

import scala.math.Ordering

object Event {
  case class Event[K, V](key: K, value: V)
    (implicit o: Ordering[K]) extends Ordered[Event[K, _]] {
      override def compare(that: Event[K, _]): Int = o.compare(key, that.key)
    }
}

object Main extends App {
  // mimicking a librarys function 
  def lala[O](e: O)(implicit ordering: Ordering[O]) = ???

  val b = Event.Event("a", 12) <= Event.Event("a", 11.99)    
  lala(Event.Event("a", 12))
}

由於存在這種不同的隱式擴展,因此無法編譯lala

diverging implicit expansion for type   
scala.math.Ordering[Event.Event[String,Int]] starting with method $conforms 
in object Predef lala(Event.Event("a", 12))

如果您的庫方法要求您的類型使用Ordering實例,則應提供擴展Ordered獨立實體,從編譯器的角度來看,該實體完全被低估了。 請嘗試以下操作:

case class Event[K, V](key: K, value: V)

object Event {
  implicit def eventOrdering[K, V](implicit o: Ordering[K]) =
    new Ordering[Event[K, V]] {
      // ...
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM