In Scala, warum nicht Unit
erweitert die Eigenschaft Product
genau wie die Tuple
* Klassen und Fallklassen (einschließlich der "leeren", wie in case class Empty()
und Fallobjekte)?
Unit
(der Einheitswert ()
, um genauer zu sein) steht definitiv als leeres Produkt und Tupel. So wird es beispielsweise in formlos verwendet.
Die aktuelle Scala-Sprachspezifikation scheint es zu sein erfordert dies in übereinstimmenden Implementierungen von Scala, gemäß Abschnitt 12.2.3:
Die Klasse
Unit
... implementiert nur die drei Methoden equals,hashCode
undtoString
von der KlasseAny
.
Um Product
zu erweitern und seine Methoden zu implementieren, müsste sich dieser Teil der Spezifikation ändern.
Einheit ist nicht analog zu einer leeren Sammlung, daher macht es keinen Sinn, sie zu einem Produkt der Arity Zero zu machen. Obwohl ein Product0 keine Daten enthält, würde es dennoch das Verhalten über die Methoden productElement und productIterator definieren.
Das Ziel von Unit besteht darin, die Abwesenheit von Verhalten oder Daten jenseits des in Object definierten Minimums darzustellen. Tatsächlich gibt die Funktion getClass () null zurück, um anzuzeigen, dass es keinen Typ hat, und per Definition sollten keine Metadaten damit verknüpft sein.
Wenn Sie das Unit extend-Produkt erstellen würden, würde dies das Konzept von "no type" verletzen.
Tags und Links scala types tuples case-class