价值类
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
),这种方法并不是最好的,尽管在这些情况下也可以使用库: