Подтвердить что ты не робот

Scala: Почему я могу преобразовать Int в Unit?

Недавно я начал играть с Scala (2.8) и заметил, что могу написать следующий код (в Scala Interpreter):

scala> var x : Unit = 10
x : Unit = ()

Не очевидно, что там происходит. Я действительно не ожидал увидеть какое-либо неявное преобразование в Unit.

4b9b3361

Ответ 1

См. раздел "6.26.1 Преобразование значений" в Scala Спецификация языка версия 2.8:

...

Отбрасывание значения. Если e имеет некоторый тип значения, а ожидаемый тип - Unit, e преобразуется к ожидаемому типу, вставив его в член { e; () }.

...

Ответ 2

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

import java.util.{List =>JList}

def remove2[A](foo: JList[A], a1:A, a2:A):Unit = {
    foo.remove(a1)
    foo.remove(a2)  //if you couldn't convert the (usually pointless) return value of remove to Unit, this wouldn't type
}

Ответ 3

Ну, все может быть преобразовано в единицу (что является ее целью). Вы можете рассматривать Единицу как единицу в решетке (под) типов, что означает, что это супертип всего. См. Статья в Википедии.