我有以下代码片段:
import scala.io.Source
object test extends App {
val lineIterator = Source.fromFile("test1.txt").getLines()
val fileContent = lineIterator.foldLeft(List[String]())((list, currentLine) => {
currentLine :: list
list
})
fileContent foreach println
}让我们假设test1.txt文件不是空的,并且其中包含一些值。所以我对foldLeft函数的问题是,为什么这个示例在这里返回一个空列表,并且当我删除foldLeft函数末尾的list时,它可以正常工作?为什么它在值fileContent下返回一个空列表
发布于 2016-09-10 00:48:45
行currentLine :: list不会改变原始列表。它创建一个带有currentLine前缀的新列表,并返回该新列表。当这个表达式不是块中的最后一个表达式时,它将被丢弃,并返回(仍然)空的list。
当您删除末尾的list时,实际上将返回currentLine :: list。
发布于 2016-09-10 00:48:29
您可以使用一些起始值(在本例中是一个空列表)和一个接受累加器和当前值的函数来调用foldLeft。然后这个函数返回新的列表。在您的实现中,第一次调用的空列表将传播到函数执行的末尾。这就是为什么你会得到一个空列表的原因。
请看这个例子:https://twitter.github.io/scala_school/collections.html#fold
发布于 2016-09-10 00:48:02
list是不可变的,所以在currentLine ::list之后仍然是空的。因此,括号内的代码返回一个空列表,然后将其与下一项一起折叠,仍然返回一个空列表。
https://stackoverflow.com/questions/39416168
复制相似问题