Angenommen, ich möchte eine Klasse wie Java Date
haben. Sein einziges Datenelement ist ein lange, das seit 1970Overhead "Boxen" primitive Typen über implicits in Scala
Würde/Könne es jeden Performance-Vorteil sein, nur eine neue Scala Art machen:
type PrimitiveDate = Long
Dann können Sie Methoden hinzufügen, indem implizit mit Umwandlung, wie es für Int mit RichInt
getan wird. Beinhaltet dieses "Boxen" des primitiven Typs in eine reiche Klasse irgendeinen Overhead (Klassenerzeugung)? Im Grunde könnte man einfach eine statische Methode
def addMonth(date: PrimitiveDate, months: Int): PrimitiveDate = date + 2592000000 * months
und lassen Sie die Art System Figur heraus, dass es angewandt werden muss, wenn d addMonth 5
in Ihrem Code erscheint.
bearbeiten
Es scheint, dass der Alias Sie erstellen type PrimitiveDate = Long
durch Schreiben vom scala Compiler nicht erzwungen wird. Ist das Erstellen einer richtigen Klasse, die Long, die einzige Möglichkeit, einen erzwungenen Typ in Scala zu erstellen?
Wie nützlich sind Sie in der Lage, einen erzwungenen Typalias für primitive Typen zu erstellen?
Guter Punkt auf die "erzwingenden Aliase". Das war eine Sache, über die ich mich wunderte. Also gibt es keine Möglichkeit, einen korrekten Typalias für einen primitiven Typ in scala zu erstellen? – ziggystar
@ziggystar - nein gibt es nicht. Ich neige dazu, Typ-Aliase für eines von zwei Dingen zu verwenden: private interne Sachen, wie Kevin unten spricht; Package Object Importe (dh warum "List" scheint immer noch in der "Scala" Paket) –
Ich denke, Miles Sabin kam mit einer eleganten und performanten [Lösung] (https://gist.github.com/milessabin/89c9b47a91017973a35f) 11 Monate nachdem diese Frage gestellt wurde. – itsbruce