4

完了結果として "_" を渡すと、なぜ「Nothing」の Promise が完了しないのだろうか。Promise を使用して何かが終了したことを通知したいときに、これに遭遇しました。

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

今のところ、Promise of Unit を使用しています。これは正常に機能し、もう少し明確です。しかし、上記のコードがタイムアウト/未完了の Promise で終了するのはまだ疑問です。

これを Akka 2.0 final で実行しました。

4

2 に答える 2

12

type の可能な値はまったくありNothingません (ないnull、まったくありません)。Nothing戻り値の型を持つ関数がNothing返せないのと同様に、の promise は完了できません。

type の値Nothingがないため、成功とは言えません。実際、あなたは成功を呼んでいません。ここで _ の意味を誤解しています:

a を宣言するvarとき (宣言するときのみ)、'_' を使用してデフォルト値に設定できます。var v : Int = _は に設定さv0var v: String = _に設定されnullます。Nothing,var v : Nothing = _でそれを試みると、クラッシュします。繰り返しますが、 type の値はありませんNothing

一方、あなたが書くとき、promiseWithFinish.Success(_)それはのショートカットです

x => promiseWithFinish.Success(x)

関数値を作成していて、使用していません。何もしていません。

于 2012-03-22T10:51:26.423 に答える
4

私はpromiseWillFinish.success(_)あなたがそれが意味すると思うことを意味するとは思わない。これは部分適用であり、その式の結果が関数であることを意味します。メソッドを呼び出したことがなくsuccess、メソッド呼び出し用の新しい無名関数を作成しただけです。

を持っていて、 type のデフォルト値としてPromise[Nothing]使用しようとしていたと思います。しかし、定義により、 type の値はありませんhttp://en.wikipedia.org/wiki/Bottom_typeを参照_NothingNothing

于 2012-03-22T10:50:30.940 に答える