質問
単位付きの数量のサポートが必要です。型システムに可能な限りユニットの正確さを強制したいのですが。たとえば、グラムとドルを組み合わせることはできません。私はパラメータ化された型のパスをたどっていますが、このコードは他の人から見た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))
}
これを行うよりクリーンな方法はありますか? <!> quot; T <!> lt;:UnitOfMeasure <!> quot;のドラムビート私を悩ませている主なものです。
解決
他のヒント
この本はありませんが、セルフタイプはおそらくあなたが必要です。クラスを別のクラスで囲み、クラススコープで使用される型定義を追加できます。
mdmcnllyから:
で例を参照したことを思い出します Scalaでのプログラミングの本 持っていた動物の基本型で 互換性のある食品、およびそのサブタイプ 互換性があるものしか食べられませんでした サブタイプであり、他人の食物ではありません。私 関連しているように感じますが、私は違います 確かに。たぶん本を持っている人 便利なのは良いナゲットをいじめることができます。 ソリューションの要点は使用することです 代わりに基本クラスのメンバーを入力します これらの分散注釈のすべて 場所。
所属していません StackOverflow