scala unit-type

Scala: ¿Por qué puedo convertir Int a Unit?



unit-type (3)

Recientemente comencé a jugar con Scala (2.8) y noté que puedo escribir el siguiente código (en el intérprete de Scala):

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

No es obvio lo que está pasando allí. Realmente no esperaba ver ninguna conversión implícita a Unidad .


Bueno, cualquier cosa puede ser convertida a unidad (que es su propósito). Puedes pensar en Unidad como unidad en la red de (sub) tipos, lo que significa que es un supertipo de todo. Ver artículo de Wikipedia .


Consulte la sección "6.26.1 Conversiones de valor" en la versión 2.8 de la especificación de idioma de Scala :

...

Valor de descarte. Si e tiene algún tipo de valor y el tipo esperado es Unidad, e se convierte al tipo esperado incrustándolo en el término { e; () } { e; () } .

...


Cualquier cosa puede ser convertida a Unidad. Esto es principalmente necesario para admitir métodos de efecto secundario que, sin embargo, devuelven valores, pero donde el valor de retorno a menudo se ignora. Por ejemplo

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 }