scala - Scala 模式匹配与可变参数
问题描述
我有一个 Web 服务器来处理传入的请求。基于 http 方法和端点,我以不同的方式处理请求。目前代码处理它:
def routes: HttpRequest => Future[HttpResponse] = { httpRequest: HttpRequest =>
(httpRequest.method, httpRequest.uri.path.toString) match {
case (GET, "/login") =>
process(getLogin)
case (POST, "/newUser") =>
process(createNewUser)
..
但是现在我需要支持一堆这种形式的相关端点:
/{version}/{serviceName}
例如:
/0/userService
/0/bookService
所以我想更新现有代码以支持新端点:
case (POST, "/${version}/${service}) =>
if ($version == 0 && $service.equalToIgnoreCase("userService"))
process(user service)
if ($version == 0 && $service.equalToIgnoreCase("bookService"))
process(book service)
我怎样才能做到这一点?
解决方案
你可以这样做:
val UrlPattern: scala.util.matching.Regex = """/(.*)/(.*)""".r
val path = "/0/userService"
path match {
case UrlPattern(version, service) => println(version, version)
}
上面的代码将导致:
(0, userService)
被打印到控制台,但你可以使用任何你想要的变量。
推荐阅读
- google-cloud-platform - 为什么使用 VPC 网络、静态内部 IP 的 VM 无法在 Google Cloud Platform Web 控制台中连接到 SSH?
- mysql - 节点中 MySql 对象的 ER_PARSE_ERROR
- arrays - 无法准确计算框模糊实现的平均值
- python - Flask - 将用户上传的图像提供给网页
- scala - 为什么在 scala 中不推荐使用隐式转换?
- react-native - React Native - 在获取和返回组件时使用 Promise
- r - 强制 R 在 dbplyr mutate_at Spark 翻译中使用单引号
- ajax - 经典 ASP - 无法从 AJAX 发布请求中获取 Request.Form 值
- php - 使用 laravel 验证时间
- python - colab 上的 graphviz - 如何使用 rankdir