我无法确定以下代码代表什么,因为这些语法未在Scala文档中完全列出。有人可以对下面的每一行有所了解吗?如果上述标题需要更改为可以使他人受益的内容,请告诉我。
val route =
path("hello") {
get {
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say hello to akka-http</h1>"))
}
}
价: http://doc.akka.io/docs/akka-http/current/scala/http/introduction.html#http-client-api
答案 0 :(得分:2)
您可能知道,它是akka http中的路线定义。它们在akka documentation中有很好的描述。此特定路线的工作方式如下:
path("hello"){...}
- 验证路径的指令get{...}
- 验证http动词的指令(方法)
所以它转换为GET / hello complete(HttpEntity(...))
是回复。答案 1 :(得分:2)
这些是按名称调用的参数,这些参数在Scala语言规范的各个点进行了描述。基本上,如果你有一个声明如下:
def path[R](string: String)(body: => R): R = ...
您需要提供一个字符串和一个代码块(body
),这是一个按名称调用的块。在这种情况下,如果body
返回类型R
的结果,那么这将是path
的推断返回类型。因此,该方法可以称为
path("hello") {
"world"
}
在使用之前不会调用call-by-name块。
以下是Rob Norris的一个很好的解释:https://tpolecat.github.io/2014/06/26/call-by-name.html