使用 yield 展平语法 - 提高代码可读性

Flatten syntax with yield - improving code readability

我正在努力提高我的代码的可读性,但我很难处理这个小块。

Foo 是一个接受列表的方法[Ping]

Thing.generatereturns一个列表[Ping]

ListOfPings 是一个列表[Ping]

hasQuality returns 评估 Ping 的布尔值

代码如下:

foo((for {
          pinger <- listOfPings
        } yield pinger.generate.filter(_.hasQuality)).flatten)

listOfPingss 中的每个 Ping 都使用 generate 方法创建一个 List[Thing],这意味着循环结束时 yield 的结果是一个 List[List[Ping]]。

我正在展平 List[List[Ping]](不是单个列表),并将整个结果放入 foo

我无法使它看起来更好看,可能是平面图?非常感谢您的帮助。

类似于:

foo {
  for (p <- listOfPings ; q <- p.generate if q.hasQuality) yield q
}