gpt4 book ai didi

scala - 使用 future 将仅副作用的函数转换为异步。返回类型是什么?

转载 作者:行者123 更新时间:2023-12-04 17:10:13 27 4
gpt4 key购买 nike

我第一次在使用 Akka 和 Scala 的实际项目中工作。在为 DAO 设计接口(interface)时(将有两种实现:内存和 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)

}

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

最佳答案

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

如果您不想相信我的话,请在 Google 上快速搜索 "Future[Unit]" scala 您会在 precisely this context 中找到很多其他人使用它的案例.

你也可以在IO ()的使用中找到这个成语在 Haskell 中——其中 ()是单位类型,IO在某些方面类似于 Scala 的 Future ——表示我们只关心副作用的计算。

关于scala - 使用 future 将仅副作用的函数转换为异步。返回类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19097458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com