我使用Scala v2.13.1和AKKA HTTP v10.1.11。
我有一个如下结构的路由。
def foo(a: String): Directive1[String] = {
provide(a)
}
def bar(a: String): Directive1[String] = {
provide(a)
}
val route: Route =
get {
foo("a") { v =>
bar(v) { v2 =>
complete(s"Received: $v2")
}
}
}
我有如下方法 foo
和 bar
接收一些参数,执行一些逻辑,然后返回 Directive1[String]
.
我想用 foo
和 bar
并将它们放在一起使用(在当前路由中以相同的逻辑顺序),所以我这样做了。
def foobar(a: String): Directive1[String] = {
foo(a) { v =>
bar(v) { v2 =>
provide(v2)
}
}
}
val route: Route =
get {
foobar("a") { v =>
complete(s"Received: $v")
}
}
我希望得到同样的结果
不幸的是 foobar
不工作,我似乎不明白为什么。
的错误。
type mismatch;
found : akka.http.scaladsl.server.Directive1[String]
(which expands to) akka.http.scaladsl.server.Directive[(String,)]
required: akka.http.scaladsl.server.RequestContext => scala.concurrent.Future[akka.http.scaladsl.server.RouteResult]
provide(v2)
我怎样才能让 foobar
?
使用以下结构: def foo(a: String: Directive1[String]= { provide(a) } def bar(a: String: Directive1[String] = { ... flatMap
:
def foo(a: String): Directive1[String] = {
provide(a)
}
def bar(a: String): Directive1[String] = {
provide(a)
}
def foobar(a: String): Directive1[String] = {
foo(a).flatMap(v => bar(v))
}
val route: Route =
get {
foobar("a") { v =>
complete(s"Received: $v")
}
}