3

我正在寻找一种解决方案,用于使用声明范围之外的列表重写提升中的 URLLiftRules.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)
}    

在您的情况下,第二种形式将是选择的规范形式,但通常第一种形式会更强大。

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

于 2010-08-02T13:10:48.097 回答