gpt4 book ai didi

Scala 模式匹配对嵌套案例类并不详尽

转载 作者:行者123 更新时间:2023-12-04 15:09:31 24 4
gpt4 key购买 nike

我有一个案例类层次结构来编码一些请求和处理错误:

  sealed trait OpError
sealed trait RequestErrorType
sealed trait ProcessingErrorType

final case class InvalidEndpoint(reason: String) extends RequestErrorType
final case class InvalidParameters(reason: String) extends RequestErrorType

final case class InvalidFormat(response: String) extends ProcessingErrorType
final case class EntityNotFound(id: Long) extends ProcessingErrorType

final case class RequestError(errorType: RequestErrorType) extends OpError
final case class ProcessingError(errorType: ProcessingErrorType) extends OpError

如果我在所有模式中编写一个简单的匹配:
  def printMatches(error: OpError): Unit = error match {
case RequestError(InvalidEndpoint(reason)) => //print something
case RequestError(InvalidParameters(reason)) => //print something
case ProcessingError(InvalidFormat(format)) => //print something
case ProcessingError(EntityNotFound(entityId)) => //print something
}

编译器给我一个关于丢失匹配的警告:
 match may not be exhaustive.
It would fail on the following input: ProcessingError(_)
def printMatches(error: OpError): Unit = error match {

但是 ProcessingError 接受一个只有两个扩展名的 ProcessingErrorType:InvalidFormat 和 EntityNotFound,它们都在模式匹配中被考虑在内。我错过了什么?

更奇怪的是,如果我将 InvalidParameters 或 InvalidEndpoint 的参数类型更改为 String*,则不会出现错误:
final case class InvalidParameters(reason: String*) extends RequestErrorType

有任何想法吗?

最佳答案

这是一个已确认的错误。 I filed a bug report for this它已在 Scala 2.12.0-M4 中得到修复。

关于Scala 模式匹配对嵌套案例类并不详尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416789/

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