2011-11-25 2 views
3

쿼리 매개 변수에서 사용하기 위해 원하는 매퍼를 검색하는 방법은 무엇입니까?리프트의 모든 매퍼에서 이름으로 필드 가져 오기

제 경우에는 필자의 'desired-field'가 value = somevalue 인 레코드를 찾고 싶습니다.

그것은 다음과 같은 방법으로

foo(Users) 

// foo defined here... 

def foo (modelObject:Mapper[_])={ 

    var field =modelObject.fieldByName("UserName").openTheBox.asInstanceOf[MappedField[_,Users]] 
    var requiredUser = modelObject.find(By(field, "dummyUser") 

} 

을 시도했지만 다음은 asInstanceOf[MappedField[_,Users]] (여기에 전달되는 사용자 인스턴스)의 실제 매퍼를 지정하는 저를 강제로. 나는 그것이 단지 '사용자'가 아닌 모든 매퍼에서 작동하도록하고 싶습니다. 나는 각 매퍼가 .fieldByName() 기능은 일부 예외를 throw하는 경우는 내가 원하는 그 경우에 필드가 없을 수 있음을 이해 asInstanceOf[MappedField[_,_]]

그것은 작동하지 않습니다, 그것은 허용합니다. 그러나 적어도 제출 된 사람들에게는 효과가있을 것입니다.

foo[Users,String](Users) 

답변

1
def foo[A<: Mapper[A],T](modelObject: A) = { 
    val field = modelObject.asInstanceOf[Mapper[A]].fieldByName("userName").openTheBox.asInstanceOf[MappedField[T, A]] 
    modelObject.asInstanceOf[MetaMapper[A]].find(By(field, "dummyUser".asInstanceOf[T]) 
} 

당신은 이런 식으로 뭔가를 할 수 lookup 함수를 매개 변수로 전달하지 않습니다.

def foo[T](find:() => Option[T]) : Option[T] = find() 

이 전화 :이 방법에 대한

foo[User](() => User.find(By(User.userName, "dummy")) 
+0

감사합니다. 이는 사소한 typecasting 변경으로도 작동 할 수 있습니다. defFoo [A <: Mapper [A], T] (modelObject : A) = { valfield = modelObject.asInstanceOf [Mapper [A]]. 필드 이름 ("userName"). ]] modelObject.asInstanceOf [MetaMapper [A]]. (By, (field, "dummyUser".asInstanceOf [T]) } – vkantiya

0

를 대신 모든 물건을 왜 돈을하는 슈퍼 방법이있는의 : 전화

사람이 나를 도울 수 ...