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:



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow