수색…


통사론

  • 클래스 측정기 (val meters : Double) AnyVal을 확장합니다.
  • 타입 미터 = 더블

비고

단위에 가치 클래스를 사용하거나 유닛에 전용 라이브러리를 사용하는 것이 좋습니다.

별칭 유형

type Meter = Double

이 간단한 접근법은 Double 모든 다른 유형이이 유형과 호환되므로 단위 처리에 심각한 단점이 있습니다.

type Second = Double
var length: Meter = 3
val duration: Second = 1
length = duration
length = 0d

위의 모든 내용이 컴파일되므로이 경우 단위는 코드 판독기의 입력 / 출력 유형 (의도 만 표시)에만 사용할 수 있습니다.

가치 클래스

case class Meter(meters: Double) extends AnyVal
case class Gram(grams: Double) extends AnyVal

값 클래스는 유니 코드를 사용하는 데 더 많은 문자가 필요한 경우에도 단위를 인코딩 할 수있는 유형 안전 방법을 제공합니다.

var length = Meter(3)
var weight = Gram(4)
//length = weight //type mismatch; found : Gram required: Meter

AnyVal 을 확장하면 JVM 수준에서 런타임 사용 불이익이 없으며 기본 유형 (이 경우 Double )입니다.

다른 단위 (예 : Velocity aka MeterPerSecond )를 자동으로 생성하려는 경우이 방법을 사용할 수도있는 라이브러리가 있지만이 방법이 최선이 아닙니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow