从我第一次读到:
for {
harpo<-list1 if harpo.length>0
groucho<-list2
chico<-list3
} yield (harpo, groucho, chico)
翻译为:
list1.filter(_.length>0).flatMap(harpo =>
list2.flatMap(groucho=>list3.map((harpo,groucho,_)))
)
我担心filter
, flatMap
&返回的不必要的中间集合map
。第一个是通过添加withFilter
方法在 Scala 2.8(?) 中修复的,我怀疑有一些魔术会根据使用情况改变这些方法的返回类型,因此当用作参数时,flatMap
它们会返回非严格集合,但我找不到任何证据。我的怀疑是正确的,它并不像乍一看那样无效吗?