BoxedUnit против модуля в Scala

Какая разница между BoxedUnit и Unit в Scala? Когда они используются как возвращаемый тип функции? И каковы их отношения с REF? Здесь ошибка несоответствия типа, с которой я столкнулся при работе с Unit.

error: java.lang.AssertionError: утверждение не удалось: невозможно преобразовать из UNIT в REF (класс BoxedUnit) в unit hello.scala в источнике-/Пользователи/shiyu/ Scala/FinalDataFlow/src/print/hello.scala, линии 347, смещение = 13999

Ответ 1

Unit - это тип уникального значения (), произносится как "единица".

BoxedUnit представляет собой деталь реализации Scala на JVM, которая используется для кодирования (), когда она входит в общий контекст или иначе назначается Any. Как правило, вы не должны слышать о BoxedUnit в первую очередь, хотя это и утечка некоторых функций уровня пользователя. Например ((): Any).getClass().getName() == "scala.runtime.BoxedUnit".

Тем не менее, ошибка, которую вы получаете, явно связана с сбоем компилятора, о чем свидетельствует AssertionError. Это не проблема в вашем коде. Вероятно, вы должны сообщить об этом как об ошибке, если он еще не находится в базе данных ошибок.