я просто прикоснулся Аккой в последнее время, когда обучение Акки-клиент, я привлекаю API DSL Rest, вот кусок коды:Что такое Happend в Akka-Http DSL?
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import scala.io.StdIn
object WebServer {
def main(args: Array[String]) {
implicit val system = ActorSystem("my-system")
implicit val materializer = ActorMaterializer()
// needed for the future flatMap/onComplete in the end
implicit val executionContext = system.dispatcher
val route =
path("hello") {
get {
complete("Say hello to akka-http")
}
}
val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)
println(s"Server online at http://localhost:8080/\nPress RETURN to stop...")
StdIn.readLine() // let it run until user presses return
bindingFuture
.flatMap(_.unbind()) // trigger unbinding from the port
.onComplete(_ => system.terminate()) // and shutdown when done
}
}
То, что я не могу понять это val route = path("hello") {....}
. Я знаю, что метод «путь» вернет директиву, а метод «get» также является директивой, но я не могу понять, как директива «встраивается» в другую директиву скобками «{}».
Я знаю, что должно быть некоторые неявные преобразования, по отладке, я увидел следующее неявное преобразование применяется: akka.http.scaladsl.server.Directive#addByNameNullaryApply
implicit def addByNameNullaryApply(directive: Directive0): (⇒ Route) ⇒ Route =
r ⇒ directive.tapply(_ ⇒ r)
Может кто-нибудь объяснить мне: как это неявное преобразование выбрано и произошло ? И какую дозу применять и нажимать попытаться? Большое спасибо!
спасибо за входные данные, что я действительно хочу знать: 'val route = path (" hello ") {....}', как я сказал в своем сообщении, он применял неявное преобразование: addByNameNullaryApply, можете ли вы помочь объясните эту часть? –
@LaurenceGeng извините недоразумение вопрос, я добавил * addByNameNullaryApply * информация, надеюсь, это полезно для вас. – chengpohi
Привет Chengpohi, с разбивкой статусы более ясны сейчас, спасибо. Можете ли вы объяснить 'r' и' _' в 'r ⇒ directive.tapply (_ ⇒ r)'? –