2016-06-23 31 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