要使此代码正常工作(一般情况下)需要导入什么?

What to import for this code to work (and in general)?

我正在玩弄 akka-http 并尝试编译以下示例:

val route: Route =
    path("data" / IntNumber) { id =>
      get {
        complete {
          "GET /data/" + id
        }
      }
    }

我发现我不知道要包含什么才能使其编译。此外,一般来说,在使用 Scala 和 Akka 时,我发现自己多次处于 "ugh, what do I need to import for this to work?""this isn't working because of some import?" 的情况具体来说。我使用 IntelliJ IDEA,但除了出色的 IDE 支持外,它无法多次自动导入所需内容(例如,在 Akka 中使用询问模式时)。我不怪 IDE;我知道有时导入正确的东西可能很复杂或不可能。所以,尽管我的问题听起来很愚蠢,但人们会做什么来独立于使用 IDE 来处理这些问题?以及要在上面的代码中添加什么才能使其正常工作?

谢谢!

我认为以下代码应该显示您需要的结构(需要隐式 ExecutionContext)以及为您提供路由 DSL 的导入:

import akka.http.server._
import scala.concurrent.ExecutionContext

class MyDataService(implicit ec:ExecutionContext) {
  import Directives._

  val route: Route =
    path("data" / IntNumber) { id =>
      get {
        complete {
          "GET /data/" + id
        }
      }
    }  
}

只要您在范围内有一个隐式 ExecutionContext 并且您可以从 akka.http.server.Directives 同伴访问隐式,您应该能够使用路由和指令功能。这是实现此目的的一种方法,但是例如,您可以混入 Directives 特征来代替并获得相同的结果。

一般来说,要在 Scala 中找到正确的隐式导入,您确实需要有良好的文档。有时,编译器错误消息可能会提示您需要哪些导入,有时则不会。

特别是 akka-http,不幸的是此时文档还不完整,这使得它使用起来有些困难。

我查找了您提供的代码片段的导入并得出:

import akka.http.server.Route
import akka.http.server.Directives._

Route 导入由 IDE 找到,但我只能通过搜索 GitHub 上的 akka-http 源代码找到路由指令的导入,寻找有关开发人员打算如何使用该库的线索。所需的导入应该在文档中很突出,但目前还没有。我还没有在 akka-http 中找到路由 DSL 的好的示例代码。