斯卡拉& lift:使用在LiftRules.statelessRewrite.append之外声明的变量重写URL

时间:2010-08-02 12:45:09

标签: scala url-rewriting lift

我正在寻找一种解决方案,使用在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))
}    

1 个答案:

答案 0 :(得分:4)

case语句中的任何小写变量都将创建一个具有该名称的新变量,因此requestList将被遮蔽。试试这个:

val requestList = "abc" :: Nil

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

另一种方法是使用反引号(Scala ref:'稳定标识符模式'):

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

在你的情况下,第二种形式将是规范选择,但一般来说第一种形式会更强大。

作为第三种选择,您还可以定义val RequestList = requestList并与大写版本匹配,但我建议不要这样做,除非您有充分理由创建大写RequestList