我正在寻找一种使用LiftRules.statelessRewrite.append范围之外声明的列表重写URL的解决方案

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))
}

最佳答案

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

08-05 08:52