Warum erweitert Unit nicht Produkt in Scala?

9

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.

    
al3xar 01.08.2014, 20:38
quelle

2 Antworten

0

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 und toString von der Klasse Any .

Um Product zu erweitern und seine Methoden zu implementieren, müsste sich dieser Teil der Spezifikation ändern.

    
Dan Getz 03.08.2014 00:40
quelle
-1

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.

    
Tompey 02.10.2014 14:24
quelle

Tags und Links