【发布时间】:2026-01-13 12:05:02
【问题描述】:
我注意到许多开源 Scala API 使用 Future(如 Slick)或 Java 样式的异常处理(如 spray-json),而不是 Try 或 Either。
在非长时间运行或异步的简单开源 API 中返回 Try 或 Either 是否存在问题?我应该避免这些,如果是,我应该改用什么?
(显然,我更喜欢使用核心 Scala API 而不是第三方库,例如 Scalaz,以避免迫使下游用户也使用这些库。)
【问题讨论】:
-
我认为这太宽泛了,这取决于您的用例,在生产应用程序中您可能希望使用
Either之类的东西(或者我宁愿使用Disjunctions 或Validations) 更好地处理如何响应用户。 -
@EndeNeu 我已将问题更新为更具体:这是关于不长时间运行或需要异步的小型、简单的 OSS 库。我还希望在核心库中返回类型:例如,我不希望我的下游用户必须处理 scalaz,除非他们愿意。
-
我认为
Try和Either对于某些用途可能有一些奇怪的语义,尽管我不太确定。例如,我过去在理解中使用Try时遇到了一些麻烦(*.com/questions/15015495/…),而关于Either,它不带偏见的事实也可能很尴尬(blog.vngrs.com/right-biased-either-in-scala)。不过,您也可以在这些标准类上捆绑您自己的基本语义。 -
@ale64bit 你会用什么代替?
-
正如@EndeNeu 提到的,类似scalaz 或github.com/wix/accord。我相信有几种选择。但就我而言,我会尝试使用标准类并实现我自己的语义。大多数时候,我不需要任何复杂的东西,并且由于隐含,上述库(特别是 scalaz)在大型项目中会产生编译时间成本。
标签: scala