質問

単位付きの数量のサポートが必要です。型システムに可能な限りユニットの正確さを強制したいのですが。たとえば、グラムとドルを組み合わせることはできません。私はパラメータ化された型のパスをたどっていますが、このコードは他の人から見た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;のドラムビート私を悩ませている主なものです。

役に立ちましたか?

解決

この記事を見つけました

http://www.michaelnygard.com/blog/2009/05 /units_of_measure_in_scala.html

お役に立てば幸いです。

他のヒント

この本はありませんが、セルフタイプはおそらくあなたが必要です。クラスを別のクラスで囲み、クラススコープで使用される型定義を追加できます。

mdmcnllyから:

  

で例を参照したことを思い出します   Scalaでのプログラミングの本   持っていた動物の基本型で   互換性のある食品、およびそのサブタイプ   互換性があるものしか食べられませんでした   サブタイプであり、他人の食物ではありません。私   関連しているように感じますが、私は違います   確かに。たぶん本を持っている人   便利なのは良いナゲットをいじめることができます。   ソリューションの要点は使用することです   代わりに基本クラスのメンバーを入力します   これらの分散注釈のすべて   場所。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top