2017-07-22 100 views
1
for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar 

爲什麼上面的行收率是從下面的線產量不同即使輸出在Yield語句是不同

for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar 

(c + i).toChar是相同於上述線而輸出應該是相同的,但它是不同。

回答

3

表明發電機的次序是顯着的。 (每個<-是一個「發電機」。)

第一個發電機是「較慢」,因爲它只在第二個發電機完成一個週期後才前進。

第一個生成器還指導輸出集合類型。如果迭代通過String,則輸出爲String,如果輸出元素仍然是Char s。如果它迭代通過Range,那麼輸出是IndexedSeq[]。 (根據Scala docs,Range是「索引序列的特例」。)

+0

謝謝。現在明白了。 – Kannan