2010-08-02 7 views
3
외부에 선언 된 변수를 사용하여 URL을 다시 작성

내가하고 싶은 LiftRules.statelessRewrite.append스칼라 및 리프트 : LiftRules.statelessRewrite.append

LiftRules.statelessRewrite.append { 
    case RewriteRequest(ParsePath("abc" :: Nil, _ , _ , _), _ , _) => 
     RewriteResponse("index" :: Nil) 
} 

의 범위에 선언 된 목록을 사용하여 리프트의 URL 재 작성을위한 솔루션을 찾고 있어요 위의 코드와 동일하게 작동하는 코드는 다음과 같습니다.

val requestList = "abc" :: Nil 

LiftRules.statelessRewrite.append { 
    case RewriteRequest(ParsePath(requestList, _ , _ , _), _ , _) => 
     RewriteResponse("index" :: Nil) 
} 

리프트 2.0으로 이러한 기능을 사용하는 방법을 쓰는 사람이 있습니까?

는 [편집]

당신은 또한 매개 변수로이 목록의 접미사를 액세스 할 수있는 가장 좋은 방법을 제안 할 수 없습니다.

LiftRules.statelessRewrite.append { 
    case RewriteRequest(ParsePath(`requestList` ::: List(someId), _ , _ , _), _ , _) => 
    RewriteResponse("index" :: Nil, Map("someId" -> someId)) 
}  

답변

4

해당 이름을 가진 새로운 변수를 생성하는 case 문의 모든 소문자 변수에 따라서 requestList은 그림자가 될 것입니다 : 내가 좀하고 싶습니다 것은 비슷합니다. 이 시도 :

val requestList = "abc" :: Nil 

LiftRules.statelessRewrite.append { 
    case RewriteRequest(ParsePath(list, _ , _ , _), _ , _) if list == requestList => 
    RewriteResponse("index" :: Nil) 
} 

또 다른 방법을 역 따옴표를 사용하는 것입니다 (스칼라 심판을 '안정적 식별자 패턴') : 귀하의 경우

LiftRules.statelessRewrite.append { 
    case RewriteRequest(ParsePath(`requestList`, _ , _ , _), _ , _) => 
    RewriteResponse("index" :: Nil) 
}  

가, 두 번째 양식이 선택할 수있는 표준이 될 것입니다, 그러나 일반적으로 첫 번째 양식은 더 강력 할 것입니다.

세 번째 대안으로 val RequestList = requestList을 정의하고 대문자 버전과 일치시킬 수도 있습니다. 대문자로 된 RequestList을 작성해야하는 충분한 이유가없는 한이 문제에 대해 조언 할 것입니다.