다음 예제에서는 Scaffile 컴파일러가 Wrapper
의 상위 형식 표현을 사용하도록 정의 된 경우에만 암시 적 클래스를 인식하는 것으로 보입니다. 왜 그런가요?매개 변수화 된 형식의 암시 적 클래스 해결
scala> case class Nested(n: Int)
defined class Nested
scala> case class Wrapper[A <: Product](nested: A)
defined class Wrapper
scala> implicit class I1[W <: Wrapper[A], A <: Product](underlying: W) {
| def ok1() = true
| }
defined class I1
scala> Wrapper(Nested(5)).ok1()
<console>:26: error: value ok1 is not a member of Wrapper[Nested]
Wrapper(Nested(5)).ok1()
^
scala> implicit class I2[W <: Wrapper[_]](underlying: W) {
| def ok2() = true
| }
defined class I2
scala> Wrapper(Nested(5)).ok2()
res1: Boolean = true
예를 들어, TypeTag
, 그것은에 부착 할 증거 typeclass 수 있도록 중첩 된 유형에 대한 전체 정보를 유지 관리 암시 해상도에 대한 해결 방법이 있나요?
참고 : 위의 예는 사례 클래스가 될 Nested
과 Wrapper
을 보여 주지만 질문에 필수적인 것은 아닙니다. 더 짧고 간단한 콘솔 세션의 편의성 일뿐입니다.
'I1'은별로 도움이되지 않습니다. 'A <: Product'에 대한 타입 제약이 이미 존재합니다. 왜 암시 적 변환에서 그것을 복제합니까? – cchantep
@cchantep 어떻게 암시 적으로'A'의 세부 사항을 알 수 있습니까? 예를 들어,'TypeTag'을 암시 적으로 연관시킬 수 있습니까? – Sim