如果您不想使用scalaz,那么您可以自己实现它
def map2[A,B,C](a: Option[A], b: Option[B])(f: (A,B) => C): Option[C] =
a.flatMap { x => b.map { y => f(x, y) } }
def sequence[A](a: List[Option[A]]): Option[List[A]] =
a.foldRight[Option[List[A]]](Some(Nil))((x,y) => map2(x,y)(_ :: _))
或者使用遍历的替代实现
def traverse[A, B](a: List[A])(f: A => Option[B]): Option[List[B]] =
a.foldRight[Option[List[B]]](Some(Nil))((h,t) => map2(f(h),t)(_ :: _))
def sequence[A](seq: List[Option[A]]): Option[List[A]] = traverse(seq)(identity)