Scala: Почему я могу конвертировать Int в Unit? - PullRequest
19 голосов
/ 18 августа 2010

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

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

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

Ответы [ 3 ]

31 голосов
/ 18 августа 2010

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

...

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

...

15 голосов
/ 18 августа 2010

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

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
}
0 голосов
/ 18 августа 2010

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

...