Scala Language
Hanteringsenheter (mått)
Sök…
Syntax
- klassmätare (valmätare: dubbel) förlänger AnyVal
- typ Meter = Dubbel
Anmärkningar
Det rekommenderas att använda värdeklasser för enheter eller ett dedikerat bibliotek för dem.
Skriv alias
type Meter = Double
Detta enkla tillvägagångssätt har allvarliga nackdelar för enhetshantering eftersom alla andra typer som är en Double
kommer att vara kompatibla med det:
type Second = Double
var length: Meter = 3
val duration: Second = 1
length = duration
length = 0d
Alla ovanstående sammanställningar, så i det här fallet kan enheter bara användas för att markera ingångs- / utgångstyper för kodläsarna (endast avsikten).
Värdeklasser
case class Meter(meters: Double) extends AnyVal
case class Gram(grams: Double) extends AnyVal
Värdeklasser ger ett typsäkert sätt att koda enheter, även om de behöver lite fler tecken för att använda dem:
var length = Meter(3)
var weight = Gram(4)
//length = weight //type mismatch; found : Gram required: Meter
Genom att utöka AnyVal
s finns det ingen körtidstraff för att använda dem, på JVM-nivå, det är vanliga primitiva typer ( Double
s i detta fall).
Om du automatiskt vill generera andra enheter (som Velocity
aka MeterPerSecond
), är detta tillvägagångssätt inte det bästa, även om det finns bibliotek som också kan användas i dessa fall: