Scala: Почему я могу преобразовать Int в Unit?
Недавно я начал играть с Scala (2.8) и заметил, что могу написать следующий код (в Scala Interpreter):
scala> var x : Unit = 10
x : Unit = ()
Не очевидно, что там происходит. Я действительно не ожидал увидеть какое-либо неявное преобразование в Unit.
Ответы
Ответ 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
Ну, все может быть преобразовано в единицу (что является ее целью). Вы можете рассматривать Единицу как единицу в решетке (под) типов, что означает, что это супертип всего. См. Статья в Википедии.