2015-10-20 83 views
0

定義:斯卡拉:關於`foldLeft`奇怪的行爲

val a = List(1, 2, 3, 4, 5, 6, 7) 

考慮與foldLeft以下行:

a.foldLeft(""){case (num, sum) => sum + (num.toString + "-")} 

我的期望是,該計劃是要幹什麼:

(((((「7」+「6」)+「5」)+「4-」)+「3-」)+「2-」)+「1-」

7-6-5-4-3-2-1-

但我得到的是:7654321-------。爲什麼會這樣?

回答

3

您將參數混合到foldLeft。檢查文檔List.foldLeft。請注意,z「零」值與函數參數中的第二個參數的類型相同,而不是第一個。

這應該工作更接近預期:

a.foldLeft(""){case (sum, num) => sum + (num.toString + "-")} 
// res0: String = 1-2-3-4-5-6-7- 

但是,如果你想在反向順序的編號,那麼你可能想使用foldRight。也許這其實是你首先要去的是什麼(請注意,在參數numsum是你給了相同的順序):

a.foldRight(""){case (num, sum) => sum + (num.toString + "-")} 
// res1: String = 7-6-5-4-3-2-1- 
1

從你的期待,我期待你的預期foldRight行爲:

scala> val a = List(1, 2, 3, 4, 5, 6, 7) 
a: List[Int] = List(1, 2, 3, 4, 5, 6, 7) 

scala> a.foldRight(""){case (num, sum) => sum + (num.toString + "-")} 
res0: String = 7-6-5-4-3-2-1-