如果爲其超類型A定義了隱式,是否可以解析類型B的隱式參數?解析超類型的隱式參數
下面是一個例子:
我有一個可枚舉類型類:
trait Enumerable[A] {
def name(a: A): String
def list: List[A]
//... other methods
}
object Enumeration {
def name[A, T >: A](a: A)(implicit ev: Enumerable[T]) = ev.name(a)
def list[T](implicit ev: Enumerable[T]) = ev.list
// ...
}
然後我定義枚舉的一個實例:
sealed trait Season
case object Winter extends Season
case object Spring extends Season
case object Summer extends Season
case object Fall extends Season
implicit val seasonEnumerable = new Enumerable[Season] {
override def list: List[Season] = List(Winter, Spring, Summer, Fall)
}
// working :
Enumeration.name(Winter: Season) shouldBe "winter"
// faling :
Enumeration.name(Winter) shouldBe "winter"
Enumeration.name(冬)是,如果失敗我不告訴scalac冬天是一個季節。我已經指定'name'方法簽名中的隱式參數是A的超類型,但它是不夠的...
有沒有更好的方法來做到這一點?
確實!謝謝:) 你能否解釋一下def name [A](a:A)(implicit ev:Enumerable [_>:A])= ev.name(a) 和def name [A,T>: A](a:A)(隱式ev:Enumerable [T])= ev.name(a)? – Loic
我已經擴大了答案。 –