gpt4 book ai didi

Scala 调度示例

转载 作者:行者123 更新时间:2023-12-04 00:04:27 25 4
gpt4 key购买 nike

我是一名 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com