私は自分でScalaを学んでいますが、私が書いた小さなテストアプリケーションの1つが、期待どおりに機能していません。誰かが私のテストアプリケーションが失敗する理由を理解するのを手伝ってくれませんか。
私の小さなテストアプリケーションは、次の「解凍」を行う「解凍」メソッドで構成されています
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の知識では、この問題を自分で理解することはできません。