2014-04-11 2 views
1

스칼라 형식 클래스와 추상 형식 별칭을 함께 구성하려고 시도했지만 나에게 약간의 문제가 발생했습니다.
코드 체크 아웃 : 내가 가진 을 ModelService :스칼라 추상 형식 별칭 메서드에서 매개 변수 클래스 만나기 Params

trait ModelService[T] { 
    type ID 
    def save(t: T): ID 
    def find(id: ID): T 
} 

object ModelService { 

    implicit object UserService extends ModelService[User] { 
    type ID = Long 
    def save(t: User): ID = ??? 
    def find(id: ID): User = ??? 
    } 

} 

내가 구현을위한 유형 클래스를 사용

object ModelHelpers { 

    def save[T](model: T)(implicit service: ModelService[T]): service.ID = 
    service.save(model) 

    def find[T: ModelService](id:) = // here, how can I declare the id's type? 
    implicitly[ModelService[T]].find(id) 
} 

질문은 : ModelHelpers.save에, 나는 사용하여 반환 형식을 선언 할 수 있습니다 service.ID

그러나 ModelHelpers.find에서 어떻게 id 유형을 선언 할 수 있습니까?

감사합니다. 예를 들어

답변

3

:

type User = String 

trait ModelService[T] { 
    type ID 
    def save(t: T): ID 
    def find(id: ID): T 
} 

object ModelService { 
    implicit object UserService extends ModelService[User] { 
    type ID = Long 
    def save(t: User): ID = t.toLong 
    def find(id: ID): User = id.toString 
    } 
} 

object ModelHelpers { 
    def save[T](model: T)(implicit service: ModelService[T]): service.ID = service save model 
    def find[ID0, T](id: ID0)(implicit service: ModelService[T] { type ID = ID0 }): T = service find id 
} 

ModelHelpers find 5L // "5": User 
관련 문제