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
}