Ricerca…


Sintassi

  • class Meter (val meter: Double) estende AnyVal
  • type Meter = Double

Osservazioni

Si consiglia di utilizzare classi di valore per unità o una libreria dedicata per loro.

Digita gli alias

type Meter = Double

Questo semplice approccio presenta seri inconvenienti per la gestione delle unità, poiché ogni altro tipo di Double è compatibile con esso:

type Second = Double
var length: Meter = 3
val duration: Second = 1
length = duration
length = 0d

Tutte le compilazioni di cui sopra, quindi in questo caso le unità possono essere utilizzate solo per marcare i tipi di input / output per i lettori del codice (solo l'intento).

Classi di valore

case class Meter(meters: Double) extends AnyVal
case class Gram(grams: Double) extends AnyVal

Le classi di valore forniscono un modo sicuro per codificare le unità, anche se richiedono un numero leggermente maggiore di caratteri per utilizzarle:

var length = Meter(3)
var weight = Gram(4)
//length = weight //type mismatch; found : Gram required: Meter

Estendendo AnyVal s, non vi è alcuna penalità di runtime per utilizzarli, a livello di JVM, quelli sono normali tipi primitivi ( Double s in questo caso).

Nel caso in cui si desideri generare automaticamente altre unità (come Velocity aka MeterPerSecond ), questo approccio non è il migliore, anche se ci sono librerie che possono essere utilizzate anche in questi casi:



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow