Scala: Pourquoi puis-je convertir Int à l'unité?
Question
J'ai récemment commencé à jouer avec Scala (2.8) et a remarqué le je peux écrire le code suivant (dans l'interpréteur Scala):
scala> var x : Unit = 10
x : Unit = ()
Il est pas évident ce qui se passe là-bas. Je ne pensais vraiment pas voir une conversion implicite Unité .
La solution
Voir la section "6.26.1 la valeur des conversions" Scala Language Specification version 2.8 de:
...
Valeur Discarding. Si e
a un certain type de valeur et le type attendu est l'unité, e
est converti
du type prévu en l'intégrant dans le terme { e; () }
.
...
Autres conseils
Tout peut être converti en unité. Cela est surtout nécessaire pour soutenir méthodes secondaires qui reviennent effectuer néanmoins des valeurs, mais où la valeur de retour est souvent ignorée. Par exemple
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
}
Eh bien, tout peut être transformé en unité (ce qui est son but). Vous pouvez penser à l'unité comme unité dans le réseau de types (sous), ce qui signifie qu'il est un supertype de tout. Voir Wikipedia article .