匹配时输入不匹配...大小写

时间:2013-09-20 05:39:52

标签: scala

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

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)

我该如何解决?

2 个答案:

答案 0 :(得分:4)

您应该将None替换为Nil中的case

OptionList的常见类型为Equals,因此x match { case ... => None case ... => List() }的结果为Equals,而不是List

您还应该在第二个toList map之后致电case,否则您将获得Seq,而不是List

答案 1 :(得分:1)

作为替代解决方案,您可以将第二个案例包装到OptionSome中:

 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)