我正在检查http4s库,并看到一些未知的语法。
val route = HttpService {
case GET -> Root / "hello" =>
Ok("Hello world.")
}
我查看了源代码,HttpService是一个对象,但其余部分是如何实现的?
答案 0 :(得分:2)
在查看这样的代码时可能有用的一些信息:
所以重写上面代码的另一种方法是:
FPDF
正如Diego的回答所述,在这种情况下传递给应用的函数是从某种HTTP请求到某种HTTP响应。
答案 1 :(得分:1)
由于Scala在重载语法方面非常灵活,因此在没有任何上下文的情况下,您通常无法明确地知道实际发生了什么。
在这种情况下,“case”关键字是第一个提示,它只能出现在match-expressions和partial函数中,所以这个
{
case GET -> Root / "hello" => Ok("Hello world.")
}
必须是部分功能。
这个函数显然是作为HttpService给出的某些方法或函数的参数传递的。在单个参数的情况下,可以放出括号。所以代码实际上意味着:
val route = HttpService({
case GET -> Root / "hello" => Ok("Hello world.")
})
现在,如果正如您所说,HttpService是一个对象,则会调用其apply-method。 所以我希望在这个对象(或者它继承的某个类或特性)中找到一个apply method,其中一个参数采用函数或部分函数。
答案 2 :(得分:0)
您可能正在阅读依赖于Spray等基础框架的某种Web应用程序的代码。
该代码的作用是指定路由,即webapp的URL地址。
在特定情况下,您说如果您在服务器正在侦听的端口上获取http请求,类型为GET,对于URL“rootUrl / hello”,您应该以状态代码200响应(OK)并且您的回复内容应该是“Hello world”。字符串。