gpt4 book ai didi

scala - Scala错误建模

转载 作者:行者123 更新时间:2023-12-03 08:26:37 25 4
gpt4 key购买 nike

我想在以下情况下如何建模错误处理:

我有CommonErrors,这是我所有方法都可能发生的错误

我也有特定的错误,例如:Error1Error2Error3
所以我们最后
DoAErrors = CommonErrors + Error1 + Error2DoBErrors = CommonErrors + Error2 + Error3
和方法签名:

doA() Either[DoAErrors, DoAResult]
doB() Either[DoBErrors, DoBResult]

很好,我想使用密封特征,以便我的库的客户可以安全地对 DoAErrorsDoBErrors进行模式匹配,并捕获常见的+特殊错误。到目前为止,我尝试了什么:
sealed trait CommonErrors
… extends CommonErrors
… extends CommonErrors

sealed trait DoAErrors extends CommonErrors
Error1 extends DoAErrors

sealed trait DoBErrors extends CommonErrors

Error2 extends DoAErrors with DoBErrors
Error3 extends DoBErrors

问题来自这样一个事实,即 doA()doB()在内部调用了一个返回 CommonError的方法,并且无法在 CommonErrorsDoA错误中 retrofit DoB。在这种情况下,如何建模?

谢谢您的帮助 !

最佳答案

根据您的描述,听起来CommonErrors实际上是DoAErrorsDoBErrors的一种可能类型。换句话说-以下陈述是正确的:

CommonErrors IS A DoAErrors

CommonErrors IS A DoBErrors


这通常意味着 CommonErrors应该扩展其他类型,而不是相反。
确实-以下代码可以编译并允许对 doAdoB的调用站点进行简单的模式匹配:
sealed trait DoAErrors
sealed trait DoBErrors
sealed trait CommonErrors extends DoAErrors with DoBErrors

class CommonE1 extends CommonErrors
class CommonE2 extends CommonErrors
class Error1 extends DoAErrors
class Error2 extends DoAErrors with DoBErrors
class Error3 extends DoBErrors

object Test {

private def common(): Either[CommonErrors, String] = Left(new CommonE1())
def doA(): Either[DoAErrors, String] = common()
def doB(): Either[DoBErrors, String] = common()
}

关于scala - Scala错误建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39549286/

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