例如,假设我希望读取脂肪,碳水化合物和蛋白质,并希望打印每个变量的运行总数.命令式样式如下所示:
var totalFat = 0.0
var totalCarbs = 0.0
var totalProtein = 0.0
var lineNumber = 0
for (lineData <- allData) {
totalFat += lineData...
totalCarbs += lineData...
totalProtein += lineData...
lineNumber += 1
printCSV(lineNumber, totalFat, totalCarbs, totalProtein)
}
Run Code Online (Sandbox Code Playgroud)
如何仅使用val来编写上述内容?
mis*_*tor 13
使用scanLeft.
val zs = allData.scanLeft((0, 0.0, 0.0, 0.0)) { case(r, c) =>
val lineNr = r._1 + 1
val fat = r._2 + c...
val carbs = r._3 + c...
val protein = r._4 + c...
(lineNr, fat, carbs, protein)
}
zs foreach Function.tupled(printCSV)
Run Code Online (Sandbox Code Playgroud)