gpt4 book ai didi

scala - 取决于参数类型的返回类型(例如 Await.ready())不能按预期工作

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

斯卡拉 Await.ready()方法定义如下:

def ready[T](awaitable: Awaitable[T], atMost: Duration): awaitable.type = ...

即返回类型是 awaitable的路径依赖类型范围。我认为(并且 IntelliJ IDEA 同意我的观点)这意味着如果我通过 Future到函数,它应该返回 Future相同类型,实际上,它确实适用于简单的情况:
val f: Future[Int] = Future { 10 }
val ft: Future[Int] = Await.ready(f, ???)

这段代码编译通过,即 Await.ready()这里真的返回 Future[Int] .但是,以下是 不是 工作:
val f: Future[Int] = Future { 10 }
val ft: Future[Int] = Await.ready(f.map(identity), ???)

它失败并出现此错误:
[error] /Users/netvl/dev/work/sandbox/src/main/scala/circuit/actors/Example.scala:53: type mismatch;
[error] found : awaitable.type (with underlying type scala.concurrent.Awaitable[Int])
[error] required: scala.concurrent.Future[Int]
[error] val ft: Future[Int] = Await.ready(f.map(identity), ???)
[error] ^

为什么会发生? f.map(identity)返回 Future[Int] ,所以我认为在 future 调用返回另一个 future 的方法也应该有效。唯一可以解决这个问题(除了重写)似乎是 asInstanceOf[Future[Int]]调用,类型归因不起作用。

顺便说一句,作为一个小问题,如何 variable.type语法正确调用?我知道它与依赖于路径的类型有关,但我找不到它的确切名称或描述,并且很难在谷歌上搜索它。

我正在使用 Scala 2.10.4。

最佳答案

Scala 版本在这里会有所帮助。使用 Scala 2.11.1,它工作得很好:

scala> val f: Future[Int] = Future(10)
f: scala.concurrent.Future[Int] = scala.concurrent.impl.Promise$DefaultPromise@68d0db31

scala> val ft: Future[Int] = Await.ready(f.map(identity), 1.second)
ft: scala.concurrent.Future[Int] = scala.concurrent.impl.Promise$DefaultPromise@68d0db31

关于scala - 取决于参数类型的返回类型(例如 Await.ready())不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649802/

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