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