2013-03-11 2 views
0

전문화에 대해 두 번째 질문을 드려 죄송합니다. 아직 도대체 무슨 일이 벌어지고 있는지 잘 이해하지 못했습니다 ...
하나의 프로젝트 (인공 지능과 Gomoku 게임), 나는 복싱없이 기본 유형을 저장해야하기 때문에 그것의 뜨거운 부분에 내 자신의 간단하고 더러운 @ 특수 광고 특별 컬렉션을 사용하기로 결정했습니다. jvisualvm의 샘플러에서 나는 명확하게 최적의 이동 검색이 실행을 시작할 때 스칼라 2.10.1 및 전문화 (올바르게 작동하지 않음)

scala.runtime.BoxesRunTime.boxToShort() 

는 MS의 수천를 먹어보기 때문에 문제는,이 정말 도움이되지 않는다는 것입니다.

프로젝트 : https://github.com/magicgoose/Gomoku
가난한 "컬렉션"과 파일 : https://github.com/magicgoose/Gomoku/blob/master/src/magicgoose/gomoku/ai/SpecializedCollections.scala
복싱의 원인에있어서, (그들 중 하나를, 나는 생각한다) : 나는 다른 프로젝트를 보았다

trait Indexed[@specialized T] extends Enumerable[T] { 
    @inline def length: Int 
    @inline def apply(i: Int): T 
// ... 
    @inline final def findIndex(fun: T => Boolean) = { 
    @tailrec def find(i: Int): Int = { 
     if (i < length) { 
     if (fun(this(i))) i 
     else find(i + 1) 
     } else -1 
    } 
    find(0) 
    } 
} 

(debox : https://github.com/non/debox), 비슷한 일을 수행하려고 시도 (원시 권투없이 데이터 수집),하지만 난 정말 거기 어떻게 완료 이해하지 않습니다.

답변

4

이 쉬운 답이 있습니다 Function1Short 인수 만 Int, Long, FloatDouble에 전문되지 않습니다. 슬프게도 편리한 속기 부족 -! -. 전화 할 때 그래서 fun 당신은

중 하나를 자신의 기능 클래스를 사용하는 방식에 상자에 필요하거나 Short => Boolean 아니라 Int => Boolean를 (사용하지 않는 있는지 확인하고 유형을 알고 그것). 간단히 말하면 문제를 설명하기 쉽습니다. 두 가지 해결책 모두 구현하기가 쉽지 않지만 현재로서는 필요한 부분입니다.

+0

죄송합니다. 이것은 매우 이상합니다. Btw, 나는 Short를 없애고 Int를 사방에 사용할 수 있으며 2 Bytes를 Short로 패킹하는 대신 Int에 2 개의 Ints를 패킹 할 수 있습니다. 이것은 더티지만이 특정 애플리케이션에서는 괜찮습니다. 왜냐하면 밸류의 범위는 어쨌든 제한되어 있기 때문입니다. 이제 나는 그것을 시도하고 개선 될 것인지를 볼 것입니다. –

+0

나는 Ints로 전환했고 지금은 복싱이 없다. –