Вопрос

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

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

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

Это было полезно?

Решение

См. Раздел "6.26.1 Конверсии стоимости" в Спецификация Scala языка Версия 2.8:

...

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

...

Другие советы

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

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
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top