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

斯卡拉 – “没什么”的承诺永远不会完成?

发布时间:2020-12-16 18:24:10 所属栏目:安全 来源:网络整理
导读:我想知道为什么当我通过“_”作为完成结果时,“没什么”的承诺永远不会完成.当我想使用Promise来表示事情已经完成时,我碰到了这个: val promiseWillFinish = Promise() promiseWillFinish.success(_) // will time out Await.ready(promiseWillFinish,5 sec
我想知道为什么当我通过“_”作为完成结果时,“没什么”的承诺永远不会完成.当我想使用Promise来表示事情已经完成时,我碰到了这个:

val promiseWillFinish = Promise()
  promiseWillFinish.success(_)
  // will time out
  Await.ready(promiseWillFinish,5 seconds)
  // will return false
  println(promiseWillFinish.isCompleted)

现在我正在使用一个单位的承诺,它工作正常,也更清晰一点.但我仍然想知道上面的代码在超时/未完成的Promise中结束了.

我用Akka 2.0决赛跑了这个.

解决方法

类型Nothing没有任何可能的值(不为null,根本没有). Nothing的承诺无法完成,就像结果类型的函数一样,Nothing无法返回.

由于没有Nothing类型的值,因此无法称之为成功.事实上,你并没有称之为成功,你误解了_在这里意味着什么:

当您声明一个var(并且仅在声明它时),您可以使用’_’将其设置为默认值. var v:Int = _将v设置为0,var v:String = _将其设置为null.如果您尝试使用Nothing,var v:Nothing = _,它将崩溃.同样,没有Nothing类型的值.

另一方面,当你编写promiseWithFinish.Success(_)时,它是一个快捷方式

x => promiseWithFinish.Success(x)

您正在创建一个函数值,而不是使用它,您什么??都不做.

(编辑:李大同)

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

    推荐文章
      热点阅读