ユニット数量のサポートが必要です。私は、型システムが可能な限りユニットの正しさを強制することを望みます。たとえば、グラムとドルを組み合わせることはできません。私はパラメータ化された型のパスを調べていますが、このコードは他の人から見たScalaコードよりはるかに反復しているようです。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"のドラムビートは、私を悩ます主なものです。
は、私が唯一の他人のために自分の互換性サブタイプとない食べ物を食べることができる互換性のある食べ物を持っていた動物、およびサブタイプの基本タイプとdealth Scalaのブックでのプログラミングの例を見て思い出します。私はそれが関連しているように感じるが、わからない。おそらく本を持っている誰かが良いナゲットを見つけ出すことができます。 ソリューションの要点は、これらの分散注釈の代わりに基本クラスの型メンバーを全面的に使用することです。 – rndmcnlly
mdmnclly、それはまさに正しいポインタでした。ありがとうございました!私はそれをアップヴォートできるように答えとしてあなたのコメントを投稿してください。 – mtnygard
+1。私の負債は返済されます。 – akarnokd