문제

단위로 수량을 지원해야합니다. 유형 시스템이 가능한 한 단위 정확성을 시행하기를 바랍니다. 예를 들어, 그램을 달러와 결합 할 수는 없습니다. 나는 매개 변수화 된 유형의 경로를 내려 가고 있지만이 코드는 내가 다른 사람들에게서 본 스칼라 코드보다 훨씬 더 반복적으로 보입니다.

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"의 드럼 비트는 나를 괴롭히는 가장 중요한 것입니다.

도움이 되었습니까?

해결책

방금이 기사를 찾았습니다

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

도움이되기를 바랍니다.

다른 팁

나는 책이 없지만 아마도 자기 유형 당신이 필요로하는 것입니다. 다른 클래스에서 클래스를 동봉하고 클래스 범위에서 사용할 유형 정의를 추가 할 수 있습니다.

mdmcnlly에서 :

나는 스칼라 북의 프로그래밍에서 호환 가능한 음식을 가진 기본 유형의 동물과 함께, 호환 가능한 하위 유형을 먹지 않고 다른 사람들을위한 음식이 아닌 하위 유형을 가진 예를 들었습니다. 나는 그것이 관련되어 있다고 생각하지만 확실하지 않습니다. 아마도 책을 가진 사람이 좋은 너겟을 괴롭힐 수 있습니다. 솔루션의 요점은 이러한 분산 주석 대신 기본 클래스의 유형 멤버를 사용하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top