我在學習自己斯卡拉和我寫的一個小測試應用程序不是我所期望的方式工作。有人可以幫助我理解我的測試應用程序失敗的原因。padTo錯誤裏面foldLeft
我的小的測試應用程序由一個執行以下操作「減壓」
val testList = List(Tuple2(4, 'a'), Tuple2(1, 'b'), Tuple2(2, 'c'), Tuple2(2, 'a'), Tuple2(1, 'd'), Tuple2(4, 'e'))
require(decompress(testList) == List('a', 'a', 'a', 'a', 'b', 'c', 'c', 'a', 'a', 'd', 'e', 'e', 'e', 'e'))
換言之,Tuple2對象應該只被「解壓縮」到一個更詳細的形式的「解壓縮」的方法。然而,我從這個方法中得到的所有東西都是List('a','a','a','a') - padTo語句適用於第一個Tuple2,但它只是突然停止工作?如果我然而使用for循環做每個元素的填充 - 一切正常......?
的完整代碼:
object P12 extends App {
def decompress(tList: List[Tuple2[Int,Any]]): List[Any] = {
val startingList: List[Any] = List();
val newList = tList.foldLeft(startingList)((b,a) => {
val padCount = a._1;
val padElement = a._2;
println
println(" Current list: " + b)
println(" Current padCount: " + padCount)
println(" Current padElement: " + padElement)
println(" Padded using padTo: " + b.padTo(padCount, padElement))
println
// This doesn't work
b.padTo(padCount, padElement)
// // This works, yay
// var tmpNewList = b;
// for (i <- 1 to padCount)
// tmpNewList = tmpNewList :+ padElement
// tmpNewList
})
newList
}
val testList = List(Tuple2(4, 'a'), Tuple2(1, 'b'), Tuple2(2, 'c'), Tuple2(2, 'a'), Tuple2(1, 'd'), Tuple2(4, 'e'))
require(decompress(testList) == List('a', 'a', 'a', 'a', 'b', 'c', 'c', 'a', 'a', 'd', 'e', 'e', 'e', 'e'))
println("Everything is okay!")
}
任何幫助表示讚賞 - 學習Scala,只是想不通我自己這個問題,我目前的知識斯卡拉。
謝謝,讚賞:) – 2013-03-13 06:39:39