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

scala – 使用future将仅限副作用的函数转换为异步.哪种退货类型

发布时间:2020-12-16 18:42:54 所属栏目:安全 来源:网络整理
导读:我在使用Akka和 Scala的真实项目中第一次工作.在为DAO设计接口时(将有两个实现:内存和mongo),我带来了以下疑问.假设我们有像这样的UserRepository的同步版本 trait UserRepository { def find(id: Int): Option[User] def save(user: User): User def delet
我在使用Akka和 Scala的真实项目中第一次工作.在为DAO设计接口时(将有两个实现:内存和mongo),我带来了以下疑问.假设我们有像这样的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)

}

您如何定义删除方法的返回时间?未来[单位]?未来[任何]未来[无效]?在异步操作中返回的最佳类型是什么,我只关心它的副作用是否成功应用.我没有什么可以返回,但我想知道删除是否成功完成,或者如果异常能够注册onFailure回调.

解决方法

您应该使用Future [Unit],原因与在同步情况下使用Unit完全相同 – 您需要返回一些内容,但没有任何需要返回的内容.另一方面,未来[任何]意味着“这里有东西,但我不会告诉你它是什么”.让我们甚至不谈论Future [Void]意味着什么.

如果您不想接受我的话,请快速搜索"Future[Unit]" scala,并在precisely this context找到许多其他人使用它的案例.

您还可以在Haskell中使用IO()找到这个习惯用法 – 其中()是单位类型,IO在某些方面类似于Scala的Future-来表示我们只关心副作用的计算.

(编辑:李大同)

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

    推荐文章
      热点阅读