"没什么"的承诺永远不会完成?

Gam*_*lor 4 scala promise akka

我想知道为什么当我通过"_"作为完成结果时,"没什么"的承诺永远不会完成.当我想使用Promise来表示事情已经完成时,我碰到了这个:

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

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

我用Akka 2.0决赛跑了这个.

Did*_*ont 11

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

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

当你声明一个var(并且只在你声明它时),你可以用'_'将它设置为默认值.v ar v : Int = _将设置v0,var v: String = _并将其设置为null.如果你尝试Nothing var v : Nothing = _,它会崩溃.同样,没有类型的价值Nothing.

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

x => promiseWithFinish.Success(x)
Run Code Online (Sandbox Code Playgroud)

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