带列表的 Scala foldLeft
Scala foldLeft with a List
我有以下代码片段:
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
函数的问题是,为什么这里的这个例子 return 是一个空列表,当我删除 foldLeft
函数末尾的 list
时它起作用了?
为什么 return 在值 fileContent
下创建一个空列表?
list是不可变的,所以在currentLine::list之后还是空的。因此括号 returns 中的代码是一个空列表,然后与下一个项目折叠,仍然返回一个空列表。
你用一些起始值(在你的例子中是一个空列表)和一个函数调用 foldLeft
,它接受一个累加器和当前值。这个函数returns new list 然后。在您的实现中,第一次调用的空列表将传播到函数执行结束。这就是您得到一个空列表的原因。
请看这个例子:https://twitter.github.io/scala_school/collections.html#fold
行currentLine :: list
不会改变原始列表。它创建一个带有 currentLine
前缀的新列表,并且 return 是该新列表。当这个表达式不是你块中的最后一个时,它将被丢弃,并且(仍然)空的 list
将被 returned.
当你去掉最后的list
时,你实际上会return currentLine :: list
.
我有以下代码片段:
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
函数的问题是,为什么这里的这个例子 return 是一个空列表,当我删除 foldLeft
函数末尾的 list
时它起作用了?
为什么 return 在值 fileContent
下创建一个空列表?
list是不可变的,所以在currentLine::list之后还是空的。因此括号 returns 中的代码是一个空列表,然后与下一个项目折叠,仍然返回一个空列表。
你用一些起始值(在你的例子中是一个空列表)和一个函数调用 foldLeft
,它接受一个累加器和当前值。这个函数returns new list 然后。在您的实现中,第一次调用的空列表将传播到函数执行结束。这就是您得到一个空列表的原因。
请看这个例子:https://twitter.github.io/scala_school/collections.html#fold
行currentLine :: list
不会改变原始列表。它创建一个带有 currentLine
前缀的新列表,并且 return 是该新列表。当这个表达式不是你块中的最后一个时,它将被丢弃,并且(仍然)空的 list
将被 returned.
当你去掉最后的list
时,你实际上会return currentLine :: list
.