首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤Scala流过程中的StackOverflowError

过滤Scala流过程中的StackOverflowError
EN

Stack Overflow用户
提问于 2013-03-30 23:42:08
回答 1查看 95关注 0票数 0

我正在尝试过滤一个带有谓词的流,但是当我尝试将流转换为包含一个元素的列表时,我收到了一个错误。

代码语言:javascript
运行
复制
def machine(n:Int) = if (n==0) List(0) else List(n/2,n/3,n/4)
def greater(n:Int) = machine(n).sum > n

val d: Stream[Int] = 2 #:: d.map(_+1).filterNot(greater)

scala> d.take(11).toList
res41: List[Int] = List(2,3,4,5,6,7,8,9,10,11)

//12 is the first number for which greater will return true
scala> d.take(12).toList
//Returns a ton of scala.collection.immutable.Stream errors

有人能给我解释一下这里到底出了什么问题吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-30 23:48:30

代码以递归方式工作。当你用完了流中的项目时,递归不会给你带来任何好处,最终你会用完堆栈空间。(当您请求的条目超过流中可能存在的条目时,您期望发生什么,因为您过滤掉了所有大的条目?您应该得到堆栈溢出或非终止(挂起),对吗?)

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

https://stackoverflow.com/questions/15720333

复制
相关文章

相似问题

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