2009-05-05 1 views
4

단위가있는 수량에 대한 지원이 필요합니다. 유형 시스템이 단위 정확성을 가능한 한 많이 시행하기를 바랍니다. 예를 들어, 그램을 달러와 결합 할 수 없어야합니다. 매개 변수화 된 형식의 경로를 따라갈 것이지만이 코드는 다른 사람들에게서 본 스칼라 코드보다 훨씬 반복적 인 것처럼 보입니다.단위가 스칼라로 멋지게 표현됩니다.

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"의 드럼 비트는 저를 괴롭히는 주요 원인입니다.

+5

호환되는 음식이있는 기본 유형의 동물과 다른 유형의 음식 만 먹을 수있는 하위 유형이있는 스칼라 프로그래밍 책의 사례를 보면 알 수 있습니다. 나는 그것이 관련되어있는 것처럼 느낀다. 그러나 나는 확실하지 않다. 어쩌면 책이있는 누군가가 좋은 덩어리를 애타게 할 수 있습니다. 솔루션의 요점은이 분산 주석 대신 모든 기본 클래스의 유형 멤버를 사용하는 것입니다. – rndmcnlly

+0

mdmnclly, 정확히 올바른 포인터였습니다. 고맙습니다! 내가 upvote 수 있도록 답변으로 의견을 게시하십시오. – mtnygard

+0

+1. 나의 빚은 갚아진다. – akarnokd

답변

4

난 그냥

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

는 희망이 도움이 문서를 발견했다.

+2

나는 그 글을 올리려고했는데, 그 기사의 저자는이 질문의 원래 포스터 일 가능성이 높습니다 :) 아마도 그는 지금 자신의 질문에 대답해야 할 것입니다. –

+1

예, 저였습니다. 나는이 질문을 먼저 썼다. 별도로 답변을 기다리는 동안 링크가있는 트윗을 받았습니다. 나는 도서관을 조사한 다음 도서관을 기반으로 한 블로그 게시물을 썼다. 나는 내 자신의 블로그에 대한 링크로 내 자신의 질문에 답하는 것이 이상 할 것이라고 생각했다. – mtnygard

1

저는 책이 없지만 self type은 필요한 것입니다. 클래스를 다른 클래스로 묶고 클래스 범위에서 사용할 유형 정의를 추가 할 수 있습니다.

1

mdmcnlly에서 :

나는 는 자신의 호환을 먹을 수있는 호환 음식을 가지고 동물 및 하위 유형의 기본 유형과 을 dealth 스칼라 책에 프로그램의 예를보고 기억합니다 하위 유형이며 다른 사람에게는 음식이 아닙니다. 나는 과 같은 느낌이지만 나는 아니야. . 어쩌면 책을 가지고있는 사람이 좋은 덩어리를 놀릴 수 있습니다. 솔루션의 요지는 기본 클래스의 유형 멤버를 사용하는 것입니다. 대신 이 분산 주석 중 하나 이상이 입니다.