5

Akka と Scala を使用した実際のプロジェクトで初めて作業しています。DAO (メモリと mongo の 2 つの実装がある) のインターフェイスを設計しているときに、次の疑問が生じました。このような UserRepository の同期バージョンがあるとします

trait UserRepository {

  def find(id: Int): Option[User]

  def save(user: User): User

  def delete(user: User): Unit

}

非同期バージョンは次のようになります。

trait UserRepository {

  def find(id: Int): Future[Option[User]]

  def save(user: User): Future[User]

  def delete(user: User)

}

delete メソッドの戻り時間をどのように定義しますか? 将来[単位]? 未来[任意] 未来[無効]? 副作用が正常に適用された場合にのみ気にする非同期操作で返すのに最適な型は何ですか。返すものは何もありませんが、削除が正常に完了したかどうか、または onFailure コールバックを登録できる例外が発生したかどうかを知りたいです。

4

2 に答える 2

10

同期の場合Future[Unit]とまったく同じ理由で使用する必要があります。何かを返す必要がありますが、返す必要があるものはありません。一方、「ここに何かがありますが、それが何であるかは教えません」という意味です。そして、何を意味するかについても話さないようにしましょう。UnitFuture[Any]Future[Void]

私の言葉を鵜呑みにしたくない場合は、Google で簡単に検索し"Future[Unit]" scalaてください。他の人がまさにこのコンテキストでそれを使用しているケースがたくさん見つかります。

このイディオムはIO ()、Haskellでの の使用にも見られます()( は単位の型でIOあり、いくつかの点で Scala に似ています) Future。これは、副作用のみを気にする計算を表します。

于 2013-09-30T15:32:57.460 に答える
1

これに使いますFuture[Unit]。このようにして、future を構成し、onComplete ハンドラーを配置して、エラーをチェックできます。

于 2013-09-30T15:24:32.173 に答える