수퍼 유형 A에 암시 적으로 정의 된 경우 유형 B에 대한 암시 적 매개 변수를 해결할 수 있습니까?수퍼 유형에서 암시 적 매개 변수 해결
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 (겨울) 만약 실패이다
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
// ...
}
그럼 I 열거 할 인스턴스를 정의 I가 열거 가능한 typeclass이
: 여기
은 일례이며 나는 겨울이 계절이라는 것을 스칼라에게 말하지 않는다. 'name'메소드 서명의 암시 적 매개 변수가 A의 수퍼 유형이지만 충분하지 않다는 것을 지정했습니다 ...더 좋은 방법이 있습니까?
실제로! 감사합니다 :) def 이름 [A] (a : A) (암시 적 ev : 열거 형 [_] : A) = ev.name (a) 및 def name [A, T> A] (a : A) (암시 적 ev : 열거 가능 [T]) = ev.name (a)? – Loic
답변을 확장했습니다. –