scala – 取决于参数类型的返回类型(例如Await.ready())无法按预
发布时间:2020-12-16 18:33:39 所属栏目:安全 来源:网络整理
导读:Scala Await.ready()方法定义如下: def ready[T](awaitable: Awaitable[T],atMost: Duration): awaitable.type = ... 也就是说,返回类型是一个依赖于路径的类型的等待参数.我认为(和IntelliJ IDEA同意我)这意味着如果我将Future传递给函数,它应该返回相同类
Scala Await.ready()方法定义如下:
def ready[T](awaitable: Awaitable[T],atMost: Duration): awaitable.type = ... 也就是说,返回类型是一个依赖于路径的类型的等待参数.我认为(和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],所以我认为在未来调用返回另一个未来的方法也应该有效.解决这个问题的唯一方法(除了重写)似乎是asInstanceOf [Future [Int]]调用,类型归属不起作用. BTW,作为一个小问题,如何正确调用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |