1

这是我拥有的代码的简化版本:

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)

我如何解决它?

4

2 回答 2

4

您应该NoneNil第一个case.

Optionand的常见类型ListEquals,所以结果x match { case ... => None case ... => List() }Equals,不是List

你也应该在第二个toList之后调用,否则你会得到,而不是。mapcaseSeqList

于 2013-09-20T05:45:36.803 回答
1

作为替代解决方案,您可以将第二种情况包装成Optionor 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)并在最后删除

于 2013-09-20T05:59:36.400 回答