4

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

4

2 に答える 2

1

mdmcnllyから:

私は、Programming in Scalaの本で、互換性のある食べ物を持っている基本タイプの動物と、互換性のあるサブタイプのみを食べて他の人の食べ物を食べられないサブタイプを扱った例を見たことを思い出します。関係があるように感じますが、よくわかりません。たぶん、本を手元に置いている人は、良いナゲットをからかうことができます。解決策の要点は、これらの分散アノテーションの代わりに、基本クラスのタイプメンバーをいたるところに使用することです。

于 2009-10-01T18:50:48.190 に答える
1

私はその本を持っていませんが、あなたが必要としているのはセルフ型かもしれません。クラスを別のクラスで囲み、クラス スコープで使用される型定義を追加できます。

于 2009-05-07T17:51:38.630 に答える