我正在学习自己的 Scala,而我编写的一个小型测试应用程序并没有按照我期望的方式工作。有人可以帮我理解为什么我的测试应用程序失败了。
我的小型测试应用程序包含一个“解压缩”方法,该方法执行以下“解压缩”
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,只是无法用我目前的 Scala 知识自己解决这个问题。