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