14 (def unused: Any = implicitly[Impl.type]) ?
https://scastie.scala-lang.org/WzO2TV4oSyqDa3bE0O8FTQ
Похоже implicit object не попадает в область видимости вовремя. Так компилится: https://scastie.scala-lang.org/576Ik6AiRSWaS9aGulQwHA
но почему добавление def unused это фиксит?
если опустить определение класса под определение имплисит обжекта , то компилится
Я понимаю Тут скорее вопрос не в том, как пофиксить, а в том, почему оно изначально не работает
Не работает, потому что в момент, когда происходит поиск имплисита Companion[String] символ обжекта Impl еще не проинициализирован, и как следствие компилятор не знает его тип. Если, например, вместо него написать implicit val без явной аннотации типа, то тоже не заведется, а если с аннотацией, то все норм. Тот unused def имел в своем теле ссылку на обжект и форсил его инициализацию в нужный момент.
кажется понял, спасибо!
Обсуждают сегодня