3

の範囲外で宣言されたリストを使用して、リフトで URL を書き換えるソリューションを探していますLiftRules.statelessRewrite.append

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

次のコードを上記と同じように動作させたい:

val requestList = "abc" :: Nil

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

Lift 2.0 でそのような機能を取得する方法を誰か書いてもらえますか?

[編集]

このリストのサフィックスにパラメーターとしてアクセスする最良の方法も提案できますか。私が取得したいのは次のようなものです:

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

1 に答える 1

4

ステートメント内の小文字の変数は、caseその名前で新しい変数を作成するため、requestListシャドウされます。これを試して:

val requestList = "abc" :: Nil

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

別のアプローチは、バックティックを使用することです (Scala ref: 'stable identifier patterns'):

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

あなたの場合、2番目の形式が選択する標準的な形式になりますが、一般的には最初の形式がより強力になります。

3 番目の選択肢として、val RequestList = requestList大文字バージョンを定義して照合することもできますが、大文字のRequestList.

于 2010-08-02T13:10:48.097 に答える