这是我的代码的简化版本:
class MyClass(a: Int)
def method1: Option[List[MyClass]] = {
val response = getData
val res = response match {
case Left(_)
| Right(Class1(None))
| Right(Class1(Some(Class2(_, _, Nil)))) => None
case Right(Class1(Some(Class2(_, _, xs: Seq[Class3])))) => xs map { x => new MyClass(x.someVal) }
}
Some(res)
}
抱怨
found : Equals
[error] required: List[MyClass]
[error] Some(res)
我该如何解决?
答案 0 :(得分:4)
您应该将None
替换为Nil
中的case
。
Option
和List
的常见类型为Equals
,因此x match { case ... => None case ... => List() }
的结果为Equals
,而不是List
。
您还应该在第二个toList
map
之后致电case
,否则您将获得Seq
,而不是List
。
答案 1 :(得分:1)
作为替代解决方案,您可以将第二个案例包装到Option
或Some
中:
val res = response match {
case Left(_)
| Right(Class1(None))
| Right(Class1(Some(Class2(_, _, Nil)))) => None
case Right(Class1(Some(Class2(_, _, xs: Seq[Class3])))) => Option(xs map { x => new MyClass(x.someVal)) }
}
并删除最后的Some(res)