gpt4 book ai didi

scala - Scala 中的 Future[Either[AppError, Option[User]]]

转载 作者:行者123 更新时间:2023-12-04 11:02:17 25 4
gpt4 key购买 nike

如题所述,使用这样的数据结构有意义吗?让我一一解释:

  • Future - 表示异步计算
  • 要么 - 传达已知错误
  • 选项 - 传达该值可能不存在

  • 看到这里,我有点害怕。使用这种类型组合是一种好习惯吗?

    最佳答案

    让我们看一下解决方案空间:

    Success(Right(Some(user))) => Everythig OK, got an user
    Success(Right(None)) => Everything OK, no user
    Success(Left(AppError)) => Something went wrong at app level
    Failure(Exception) => Something went wrong

    这看起来很有表现力,但是当您尝试将这种嵌套结构与其他调用组合时,事情会变得很丑陋(参见 Converting blocking code to using scala futures )以获取组合 Future[Option[T]] 的示例)

    所以关注 the principle of the least power ,
    我们问自己:是否有不那么复杂的替代方案来保留语义?
    有人可能会说 Future[User]如果我们充分利用异常(和异常层次结构)的潜力,这可能就足够了。

    让我们检查:
    Everythig OK, got an user => Success(user)
    Everything OK, no user => Failure(UserNotFoundException) (Application level exception)
    Something went wrong at app level => Failure(AppException) (Application level exception)
    Something went wrong => Failure(Exception) (System-level exception)

    这种方法的唯一限制是 API 的用户需要了解异常,这些异常在界面中没有自我记录。优势在于拥有基于 Future 的 API。 s 将允许与其他 Future 的富有表现力的一元组合- 基于 API。

    关于scala - Scala 中的 Future[Either[AppError, Option[User]]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40283042/

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