Ich bin auf der Suche nach einer Typfamilie, die Datengrößen (Byte, KB ...) darstellen würde. denn das ist die Idee, einen Basistyp zu bauen, um die realen Größen zu haben, basierend auf:mit benutzerdefinierten Scala-Typen in der Liste
type SizeUnit = Int
type B = SizeUnit
type KB = SizeUnit
type MB = SizeUnit
type GB = SizeUnit
type TB = SizeUnit
type PB = SizeUnit
type EB = SizeUnit
type ZB = SizeUnit
type YB = SizeUnit
haben eine geordnete Liste von ihnen:
val sizes = List(B, KB, MB, GB, TB, PB, EX, ZB, TB)
und hat eine convertion Methode, die einen Zieltyp nimmt , findet die Indexdifferenz zwischen ihnen und multipliziert mit 1024 in der Potenz der Differenz. so:
def convertTo(targetType: SizeUnit): SizeUnit ={
def power(itr: Int): Int = {
if (itr == 0) 1
else 1024*power(itr-1)
}
val distance = sizes.indexOf(targetType) - sizes.indexOf(this)
distance match {
//same type - same value
case 0 => targetType
//positive distance means larget unit - smaller number
case x>0 => targetType/power(distance)
//negative distance means smaller unit - larger number and take care of negitivity
case x<0 => targetType * power(distance) * (-1)
}
}
ich habe ein paar Probleme, bevor ich sogar die Gültigkeit des Verfahrens prüfen (wie ich bin neu in Scala):
- ist es eine Möglichkeit, eine Liste (oder eine andere zu schaffen Seq), die Typen statt Werte hält? oder vielmehr - Typen als Werte?
- Wenn ich richtig verstehe, werden Typen nicht über Kompilierung gehalten. bedeutet das, dass in der Laufzeit, wenn ich einen GB-Wert an eine vorhandene KB übergebe, es die Typen nicht entschlüsseln kann?
danke, Ehud
diese gute Ideen sind, aber sie haben nicht mein Hauptproblem lösen, das ist, wie die Konvertierung zu tun, um die Leistung ohne hartzucodieren das jedes Bedürfnis, wie def TOB (Lagerung: Storage) storage.unit Spiel {case KB => storage.num * 1024 .... –
@EhudKaldor Wenn 'B',' KB', 'MB', etc sind * Objekte *, nicht * Typen *, können Sie alles zu ihnen tun. Sie können zum Beispiel konstruieren die Liste 'List (B, KB, MB, ...)', und hat eine Funktion 'convert (Menge: Lagerung, Einheit: SizeUnit): Storage', die die Positionen in der Liste verwendet von die zwei "SizeUnit" -Werte, die beteiligt sind, um das Verhältnis zwischen ihnen zu berechnen. – Ben