2016-05-19 2 views
3

Я новичок в scala и пробую некоторые упражнения для handson.scala implicit импортируется только при использовании

Я пытаюсь использовать implicits, помещая implicits в объект-компаньон. однако компилятор не обнаруживает неявное, если оно не используется.

class ImplicitTest { 
    import Implicits.implicitInt; 
    println(implicitInt) 
    def implicitm1(implicit i : Int) = 1 
    println(implicitm1) 
} 
object Implicits { 
    implicit val implicitInt = 1 
} 

Это компилируется в порядке. Однако, если я закомментировать третью строчку

\\println(implicitInt)` 

тогда я получаю время компиляции ошибка на

println(implicitm1)` 

, который говорит

could not find implicit value for parameter i:Int` 

not enough arguments for method implicit m1(implicit i:Int) . Unspecified value parameter i` 

, что я сделал не так?

Заранее спасибо

ответ

4

Если включить тип для val implicitInt: Int = 1, это работает. Такие проблемы являются одной из причин, по которой рекомендуется всегда указывать типы для implicits.

Операция типа Scala работает сверху донизу, поэтому в вашем случае компилятор еще не знает этот тип, когда он добирается до typechecking линии println(implicitm1).

Я думаю, что когда вы включаете println(implicitInt), компилятор вынужден найти implicitInt в этой строке.

0

Другим решением является перемещение объекта. Определение Implicits над классом ImplicitTest.

В этом случае тип implicitInt уже выведен.

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