for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar
为什么上述产量与下面的产量不同
for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar
尽管(c + i).toChar
对于上面的行是相同的,但输出应该相同但不同。
答案 0 :(得分:3)
证明了发电机的顺序很重要。 (每个<-
都是&#34;生成器&#34;。)
第一台发电机的速度慢了#34;因为它只在第二个发电机完成一个循环后才会前进。
第一个生成器还指导输出集合类型。如果它迭代String
,则输出为String
,如果输出元素仍为Char
s。如果它遍历Range
,则输出为IndexedSeq[]
。 (根据Scala docs,Range
是&#34;索引序列的特例。&#34;)