2017-04-27 12 views
0

는 다음과 같은 스칼라 값 유형을 상상해 동의합니다기능은 내 지능 기반 값 유형이

class Prime(val self: Int) extends AnyVal { 
    def +(i: Int): Int = self+i 
} 

가 어떻게 내 기능 inc는 인수로 Prime뿐만 아니라 정규 Int을 수용 할 수 ? 나는이 함수 호출을 할 수 있도록 변화 중 하나 Prime 또는 inc을 만들 수있는 방법을 찾고 있어요

scala> inc(new Prime(2)) 
<console>:10: error: type mismatch; 
found : Prime 
required: Int 
     inc(new Prime(2)) 
     ^

:

def inc(i: Int): Int = i + 1 

는 지금, 나는 다음과 같은 유형의 오류가 발생합니다.

답변

0

Prime은 컴파일시에는 아니고 런타임시에만 int이므로 int가 발생하기 위해서는 int에 대한 변환기가 있어야합니다.

implicit def backToInt(p:Prime): Int = p.self 

이제는 암시 적으로 int로 변환 될 inc(new Prime(2))을 전달할 수 있습니다. 그러나 이것은 유형 안전성 인 값 유형의 포인트를 무효화합니다.

+0

제안 해 주셔서 감사합니다. 이것을 타입 인자에서'Int'를 사용하도록 확장하는 방법이 있습니까? 나는. 이 작업을하기 위해서 :'Def sum (iterate [Int]) = is.fold (0) (_ + _)'...'sum (Seq (new Prime (2), new Prime (3)))' – derabbink

+0

왜 그냥'map'을 사용하지 않습니까? points.map (_. self)' –

+0

실제 논리에서 벗어나므로 여분의 변환을 직접 입력하지 않아도됩니다. – derabbink