2 Stimmen

Scala: Bequeme Bindung von Parametern des Auflistungstyps

Der Einfachheit, Klarheit und Abstraktion halber möchte ich einen weiteren Namen für eine bestimmte Bindung einer parametrisierten Auflistungseigenschaft erfinden. Betrachten Sie zum Beispiel zunächst:

import collection.mutable.Map // NB: Map is a trait
val m1 = Map[String, Int]()   // uses the Map companion object to create a HashMap

Jetzt möchte ich Folgendes ersetzen MyMap für Map[String, Int] . Idealerweise würde ich gerne etwas tun wie:

trait MyMap extends Map[String, Int]
object MyMap extends Map[String, Int]   // not good enough by itself, need some apply defs
val m2 = MyMap()                        // nope

Ich könnte noch mehr Dinge in die MyMap Begleitobjekt, oder ich könnte MyMap erweitern HashMap[String, Int] und verlassen Sie sich nicht auf die magische Voreinstellung innerhalb des Map-Begleitobjekts.

Aber diese Alternativen scheinen mir zu viel Arbeit für etwas zu sein, das einfach sein sollte: Ich möchte nur MyMap zu handeln wie Map[String, Int] wo immer sie auftaucht. Wie lässt sich das am einfachsten bewerkstelligen, oder übersehe ich ein tieferes Prinzip?

4voto

Alexey Romanov Punkte 160158

Verwenden Sie einen Typ-Alias:

type MyMap = Map[String, Int]

Beachten Sie, dass Sie dadurch nicht in der Lage sind object MyMap und wenn Sie es definieren, ist es nicht das Begleitobjekt ( object Map ist) und der Compiler prüft sie nicht auf implizite Konvertierungen.

0voto

agilesteel Punkte 16640

@Alexey Romanov Ein Typ-Alias gibt Ihnen nicht die Fabrikmethode. Ein Import hingegen schon.

scala> import collection.mutable.{Map => MyMap}
scala> val m1 = MyMap()
m1: scala.collection.mutable.Map[Nothing, Nothing] = Map()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X