2017-01-21 26 views
1

我從書「斯卡拉不耐煩」,我確認我自己這些線路的問題:不同的返回類型時,我切換了環路發生器爲了

for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar 
// Yields "HIeflmlmop" 
for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar 
// Yields Vector('H', 'e', 'l', 'l', 'o', 'I', 'f', 'm', 'm', 'p') 

首先產生一個String和第二產生Vector?但我希望他們能夠返回相同的價值。

回答

5

一般來說,理解中的第一集合決定yield的返回類型。

因爲:

Scala中的一個對於修真是Collection.map.flatMap等語法糖。所以你開始的集合是你最終的集合。

mapflatMap爲您的代碼等效是:

"Hello".flatMap(c => (0 to 1).map(i => (c + i).toChar)) 

(0 to 1).flatMap(i => "Hello".map(c => (c + i).toChar)) 
相關問題