2013-08-31 2 views
3

봉인 된 형질을 유형 안전성을 제공하는 방법으로 별명을 부여하는 방법이 있습니까? 나는 내가 케이스 클래스 나 타입 클래스를 쓸 수 있다는 것을 알고 있지만, 그런 해결책은 과잉이다.봉인 된 형질에서 안전한 별칭을 입력하십시오.

일반의 예를 설명 :

type Lon = Double 
type Lat = Double 

def lonLatPair(lon:Lon, lat:Lat):(Lon, Lat) = (lon, lat) 

val someLon:Lon = 1.2 
val someLat:Lat = 3.4 

lonLatPair(someLon, someLat) // Success! 
lonLatPair(someLat, someLon) // Dismal failure in the form of a type error 

답변

2

대신 암시 클래스를 선언 할 수

implicit class Lon(val value: Double) extends AnyVal 
implicit class Lat(val value: Double) extends AnyVal 

암시 클래스는 당신이 Lon 또는 Lat는 언제든지 더블을 사용할 수있는 장점이 있습니다 필수 - 할당이 작동하도록 허용하지만 사용 사례에 따라 너무 제한적일 수 있습니다.

extends AnyVal 부분은, 기본적으로 대부분의 시간 Lon 대신 또는 천연 형 DoubleLat의 사용에 더 실행 오버 헤드가 있다는 것을 의미한다.

다른 방법으로 Scalaz (example) 또는 shapeless (example)를 사용하여 "unboxed new type"기술을 사용할 수 있습니다.

관련 문제