2016-06-23 4 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 несмотря на импорт? Есть ли способ найти компилятор IntImplicit в пределах объекта Inner?

Обновление: Что делать, если я не вложен 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. –

+0

Я думаю, что это мой ответ на мое обновление. Благодарю. – Lasf

 Смежные вопросы

  • Нет связанных вопросов^_^