如何在Scala中定义错误类型?

Mic*_*ael 3 enums scala

假设我为我的Scala应用程序定义了错误.我想他们是Error,WarningOk.我希望 ErrorWarning包含一个人类可读的短信.

我还想分配数字代码(0 - for Ok,1 - for Warning和2 - for Error)来查找错误列表中最严重的错误.

所以,我定义这个错误的东西如下:

object MyErrors {  
  abstract sealed case class MyError(code: Int, maybeMessage: Option[String])
  object Ok extends MyError(0, None)
  final case class Warning(message) extends MyError(1, Some(message)) 
  final case class Error(message) extends MyError(2, Some(message))
}

是否有意义?你会如何实现它?

Nic*_*las 8

根据我的几个问题:

  1. 您无法扩展案例类.考虑sealed trait还是简单abstract class
  2. 为什么所有这些都包含在MyErrors对象中?
  3. 你真的需要这个Int领域吗?您可以使用模式匹配进行过滤.
  4. Ok作为的一个实例MyError的外观语义错误.我宁愿用Status
  5. 选择的问题,但我会定义一个子特征 ErroneousStatus
  6. 在您进入设计之前,您是否考虑过EitherValidation作为替代方案?