價值類

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

值類提供了一種型別安全的方法來編碼單元,即使它們需要更多的字元來使用它們:

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

通過擴充套件 AnyVals,使用它們沒有執行時間損失,在 JVM 級別上,這些是常規原始型別(在本例中為 Doubles)。

如果你想自動生成其他單位(如 Velocity aka MeterPerSecond),這種方法並不是最好的,儘管在這些情況下也可以使用庫: