首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有列表的Scala foldLeft

带有列表的Scala foldLeft
EN

Stack Overflow用户
提问于 2016-09-10 00:40:15
回答 3查看 3.7K关注 0票数 2

我有以下代码片段:

代码语言:javascript
复制
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下返回一个空列表

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-10 00:48:45

currentLine :: list不会改变原始列表。它创建一个带有currentLine前缀的新列表,并返回该新列表。当这个表达式不是块中的最后一个表达式时,它将被丢弃,并返回(仍然)空的list

当您删除末尾的list时,实际上将返回currentLine :: list

票数 5
EN

Stack Overflow用户

发布于 2016-09-10 00:48:29

您可以使用一些起始值(在本例中是一个空列表)和一个接受累加器和当前值的函数来调用foldLeft。然后这个函数返回新的列表。在您的实现中,第一次调用的空列表将传播到函数执行的末尾。这就是为什么你会得到一个空列表的原因。

请看这个例子:https://twitter.github.io/scala_school/collections.html#fold

票数 2
EN

Stack Overflow用户

发布于 2016-09-10 00:48:02

list是不可变的,所以在currentLine ::list之后仍然是空的。因此,括号内的代码返回一个空列表,然后将其与下一项一起折叠,仍然返回一个空列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39416168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档