スーパータイプAに対して暗黙的に定義されている場合、タイプBの暗黙のパラメータを解決できますか?ここスーパータイプから暗黙のパラメータを解決する
は一例であり:
Iが列挙型クラス有する:私は列挙のインスタンスを定義
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(冬)が失敗する場合私は冬がシーズンだとスカラックに伝えません。私は 'name'メソッドのシグネチャの暗黙のパラメータがAのスーパータイプであると指定しましたが、それは十分ではありません...
これを行うには良い方法がありますか?
実際に!ありがとう:) def name [A](a:A)(暗黙のev:Enumerable [_>:A])= ev.name(a) とdef name [A、T> A](a:A)(暗黙のev:Enumerable [T])= ev.name(a)? – Loic
私は答えを広げました。 –