даже без указания type parameter ?
почему не собирается holderDoc.field понятно, но то, что собирается holder.genDoc.field стало сюрпризом
Получилось в итоге найти/разобраться?) А то интересно и непонятно :) Может, вообще кандидат на https://github.com/scala/bug
Nothing подставляет, поч работает и правда интересно.
найти/разобраться пока не получилось у нас на реальном проекте активно абьюзится такая бага/фича пока понятно только что не стоит так делать
Скорее всего где-то внутри тип Nothing & Document, есть же ограничение сверху явное на T
Ой, наверное сюда нужен был реплай. Ну в общем, не похоже на магию, как мне кажется, есть разумное объяснение. С флагом -explain пробовали?
да думаю изза подтипа, его убрать и все свалится
КМК достаточно разумное поведение, насколько оно вообще может быть с asInstanceOf. Когда просишь сложить результат тебе в переменную - компилятор не имеет понятия, какой тип тебе нужен, а Nothing удовлетворяет ограничениям. А когда сразу в том же выражении вызываешь следующий метод, то тебе подбирают класс, где этот метод есть. Если же явно указать желаемый тип значения, то всё нормально. Но тут другой момент. Если указать посторонний тип, удовлетворяющий ограничениям, то всё тоже вроде будет нормально, но в рантайме будет падение: https://scastie.scala-lang.org/jjfWSe6jSG2tkv8KtXENzA
Ну это проблема не компилятора совершенно, а того, что там asInstanceOf написан небезопасно - явно говорит, что в любой тип может кастовать, а не тот, что в имплементации
Обсуждают сегодня