我写过这个scala代码:
scala> val lists = List(1, 2, 3) :: List.empty :: List(5, 2) :: Nil
lists: List[List[Int]] = List(List(1, 2, 3), List(), List(5, 2))
scala> val x = for {
| list @ head :: _ <- lists
| } yield list.size
x: List[Int] = List(3, 2)
这可行,但输出是一个很大的混乱。这份清单是如何反转的?
我希望输出list @ head
意味着List(1, 2) :: 3
但List(3,2)的输出有点无法解释。
答案 0 :(得分:9)
列表没有反转,您将返回包含其他列表大小的列表。你的理解大致相当于:
lists.collect { case list @ head :: _ => list.size }
list @ head :: _
仅匹配非空列表,list
标识符是映射的整个List
- 它将映射到其大小。因此,当空列表被丢弃时,大小列表将为List(3, 0, 2, 0)
,即List(3, 2)
。