我需要支持单位数量。我希望类型系统尽可能地强制执行单元正确性。例如,不可能将克与美元结合起来。我正在走参数化类型的道路,但这段代码似乎比我从其他人那里看到的 Scala 代码重复得多。
abstract class UnitOfMeasure
abstract class Range[T] {
type T <: UnitOfMeasure
}
class Quantity[T <: UnitOfMeasure](value: Double)
class DefiniteRange[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T]) extends Range[T]
class Confidence(conf: Double) {
require(0.0 <= conf && conf <= 1.0)
}
class ConfidenceInterval[T<:UnitOfMeasure](lowerBound: Quantity[T], upperBound: Quantity[T], confidence: Confidence) extends Range[T] {
def this(lower: Quantity[T], upper: Quantity[T]) = this(lower, upper, new Confidence(.90))
}
有没有更清洁的方法来做到这一点?“T<:UnitOfMeasure”的鼓声是困扰我的主要事情。