Scala编码风格

时间:2017-09-14 23:10:18

标签: scala akka

我无法确定以下代码代表什么,因为这些语法未在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

2 个答案:

答案 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