Scala: Warum kann ich Int Einheit umwandeln?
Frage
Ich habe mit Scala seit kurzem spielen (2.8) und bemerkte, das kann ich den folgenden Code (in der Scala Interpreter) schreiben:
scala> var x : Unit = 10
x : Unit = ()
Es ist nicht klar, was dort vor sich geht. Ich habe nicht erwartet, wirklich jede implizite Konvertierung zu sehen Einheit .
Lösung
Siehe Abschnitt "6.26.1 Wert Conversions" in Scala Language Specification Version 2.8:
...
Wert Discarding. Wenn e
einen Wert Typ hat und die erwartete Typ ist Einheit, e
ist umgewandelte
auf die erwartete Art, indem sie in dem Begriff { e; () }
Einbettung.
...
Andere Tipps
Alles kann zu Einheit umgewandelt werden. Dies ist vor allem notwendig, Neben Bewirkung Methoden zu unterstützen, die dennoch Werte zurückgeben, aber wo der Rückgabewert wird oft ignoriert. Zum Beispiel
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
}
Nun, alles kann zu Einheit umgewandelt werden (das ist ihr Zweck). Sie können im Gitter von (Teil-) Typen als Einheit von Einheit denken, was bedeutet, es ist ein übergeordneter Typ von allem ist. Siehe Wikipedia-Artikel .