Scala: Почему я могу конвертировать int ust
Вопрос
Недавно я начал играть со 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
}
Ну что-нибудь может быть преобразовано в блок (что является его целью). Вы можете подумать об устройстве как блок в решетке (суб) типов, что означает, что это супертип всего. Видеть Статья Википедии.