2016-06-23 8 views
1

어쩌면 바보 같은 질문이지만, 다음을 컴파일하는 것은 error: could not find implicit value for evidence parameter of type Outer.Inner.MyImplicit[Int] 제공 :암시 적 객체를 가져 오는 방법은 무엇입니까?

object Outer { 
    import Inner._ 

    def someMethod[T : MyImplicit] = {} 
    someMethod[Int] 

    object Inner { 
    sealed trait MyImplicit[T] 
    implicit case object IntImplicit extends MyImplicit[Int] 
    } 
} 

Outer 객체 가져 오기에도 불구 IntImplicit를 볼 수없는 이유는 무엇입니까? 컴파일러에서 Inner 개체 내에 IntImplicit을 찾는 방법이 있습니까?

업데이트 : Inner을 반입하지 ​​않으면 어떻게됩니까? 어떻게 가져 오겠습니까?

object Outer { 
    import Other._ 
    def someMethod[T : MyImplicit] = {} 
    someMethod[Int] 
} 

object Other { 
    sealed trait MyImplicit[T] 
    implicit case object IntImplicit extends MyImplicit[Int] 
} 

감사합니다.

답변

2

가져 오기 전에 Inner 개체를 정의하면됩니다. 그래서, 이것은 잘 작동합니다.

object Outer { 
    object Inner { 
    sealed trait MyImplicit[T] 
    implicit case object IntImplicit extends MyImplicit[Int] 
    } 
    import Inner._ 

    def someMethod[T : MyImplicit] = {} 
    someMethod[Int] 
} 
+0

@ Sergey 대신 별도의 (중첩되지 않은) 객체를 가지고 있다면 어떻게 할 것인가? (업데이트를 참조하십시오) – Lasf

+2

명시 적 서명이있을 때 순서가 중요하지 않다고 덧붙입니다 :'implicit val IntImplicit : MyImpicit [Int] = new MyImplicit [Int] {}'. 그러나'case object'에 넣을 방법이 없습니다. –

+0

내 업데이트에 대한 내 대답이라고 생각합니다. 감사. – Lasf

관련 문제