價值類
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
通過擴充套件 AnyVal
s,使用它們沒有執行時間損失,在 JVM 級別上,這些是常規原始型別(在本例中為 Double
s)。
如果你想自動生成其他單位(如 Velocity
aka MeterPerSecond
),這種方法並不是最好的,儘管在這些情況下也可以使用庫: