2010-08-02 60 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) 
} 

任何人都可以編寫如何使用lift 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) 
} 

另一種方法是使用反引號(Scala的裁判:「穩定的標識圖案」):

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

在你的情況,第二種形式是規範的一個選擇,但總的來說第一種形式會更強大。

作爲第三種選擇,您也可以定義val RequestList = requestList並與大寫版本匹配,但我會建議您不要這樣做,除非您有足夠的理由創建大寫的RequestList