价值类

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