Scala 调度示例

标签 scala

我是一名 Java 工程师,最近在慢慢学习 Scala。我遇到了一些使用 Dispatch 发出简单 GET 请求的示例代码:

val request = url("http://somesite.com")
val result = Http( request OK as.String)

问题是……我不太明白这里发生了什么。首先,Http是一个类吗?或方法?其次,传递给它的参数是怎么回事?我想也许我们传递了三个参数,Scala 允许我们省略逗号。但是当我尝试添加逗号时,出现了编译错误,所以这是不对的。

我确信这对精通 Scala 的人来说是有意义的,但我还没有到那里,它让我感到困惑。我试过在网上寻找文档,但没有发现任何有用的东西。

最佳答案

这是一个(痛苦的)显式版本,删除了所有语法糖:

import dispatch.{ Defaults, Http, Req, as, implyRequestHandlerTuple, url }
import scala.concurrent.Future

val request: Req = url.apply("http://somesite.com")

val result: Future[String] =
  Http.apply(
    implyRequestHandlerTuple(request).OK[String](as.String)
  )(Defaults.executor)

url 是一个带有 apply 的单例对象返回 Req 实例的方法案例类。 Http 也是一个单例对象,它还有一个apply方法。 Httpapply采用两个参数列表——第一个采用单个 Req参数,第二个采用执行上下文(您可以将其视为 Scala 版本的 Java 版本 Executor )。

implyRequestHandlerTuple 是一种隐式方法。 Req没有 OK方法,但编译器知道 RequestHandlerTupleBuilder class 这样做(并且它需要适当的参数——在这种情况下是一个从 Response 到某种类型的函数),所以在原始版本中它会自动应用这个方法来进行从 Req 的转换.

最后,as是一个包含 String 的包单例对象。此对象扩展 Response => String (这是 Function1[Response, String] 的更多语法糖。我们的 OK 方法正在寻找一个采用 Response 的函数,所以我们在那里很好。

最后你得到了一个 Future[String] .有很多other places阅读 future ,所以我不会在这里详细介绍,但简而言之,这个值可能不满意(即您仍在等待结果),或者对失败感到满意(在网络错误等情况下)。 ),或成功满足(在这种情况下,它将包含响应正文)。

关于Scala 调度示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143903/

相关文章:

scala - 如何通过 JMX 动态更改 Play 中的配置

scala - 简单问题 - "Error: missing argument list for method"

python - 分子动力学模拟器的最佳语言,可在生产中运行。 (Python+Numpy?)

scala - 在If表达式中返回类型

Scala:获取 Map.head 元素的键(和值)

scala - 嵌套案例类之间的递归转换,其中目标中的字段是源类的未对齐子集

scala - 使用单片眼镜/scala 镜片时的权益成本

scala - 替换列表元素中的字符串

scala - 如何根据相互遵循的不同条件构建 Seq

scala - Apache-Spark 图形框架中的 SBT