我有两个问题,但我希望答案是相互交织的。所以我在玩 flatMapping 不同的参数类型。我得到以下信息:
val s: List[String] = List("f2", "df", "e") //> s : List[String] = List(f2, df, e)
val o = s.map(s => if (s.head == 'f')Some(s) else None)
//> o : List[Option[String]] = List(Some(f2), None, None)
val o1 = s.flatMap(s => if (s.head == 'f')Some(s) else None)
//> o1 : List[String] = List(f2)
val a: Option[String] = Some("Hello") //> a : Option[String] = Some(Hello)
val a1 = a.map(s => s.toList) //> a1 : Option[List[Char]] = Some(List(H, e, l, l, o))
但
val a2 = a.flatMap(s => s.toList) //gives
//type mismatch; found : List[Char] required: Option[?]
所以我试图理解 o1 编译而不是 a2 背后的逻辑。然后查看 Option 我想知道为什么 Option 不继承特征:Seq 和 Set?Option 是一个 Seq 因为它保持顺序,它是一个 Set 因为它不包含重复项。通过 Seq 和 Set 它将继承自 Iterable 和 Traversable。