特征中定义的Scala tail-recursive Stream处理器功能可以引用str
发布时间:2020-12-16 19:07:45 所属栏目:安全 来源:网络整理
导读:在以下情况下 trait T { @tailrec def consume[A](as: Stream[A]): Unit = { if (as.isEmpty) () else consume(as.tail) } }object O extends T 调用O.consume(Range(1,N).toStream),N足够大,程序将耗尽内存,或者至少将消耗O(N)而不是所需的O(1). 解决方法
在以下情况下
trait T { @tailrec def consume[A](as: Stream[A]): Unit = { if (as.isEmpty) () else consume(as.tail) } } object O extends T 调用O.consume(Range(1,N).toStream),N足够大,程序将耗尽内存,或者至少将消耗O(N)而不是所需的O(1). 解决方法
为特征生成尾递归方法. trait(this O)的扩展器中的方法条目将调用转发到trait的方法,但是在执行此操作时,它会保留对Stream头部的引用.
因此,该方法是尾递归的,但是内存仍然不能被释放.解决方法:不要直接在对象中定义特征中的Stream函数. 另一种替代方案是scalaz的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – $http:如何使用CORS从WebApi获取头文件名
- 调用webservice异常java.lang.ClassCastException: java.la
- 窗口 – 不要用emacs显示^ M个字符
- Scala:我如何编写sortBy所具有的函数类型?
- 前端开发框架bootstrap
- Bootstrap 3.1如何使用mixin make-grid-columns()?
- osx – 如何解决我的删除键VIM在ssh? (Mac OS X)
- bash – 加密/解密存储在配置文件中的密码
- SHELL编程(一) 基础语法
- 为什么在Play Framework中使用@Singleton对Scala的对象?