加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读