ruby Enumerator::lazy

Posted 琼楼玉宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby Enumerator::lazy相关的知识,希望对你有一定的参考价值。



当一个很大的数组或集合需要做循环操作的时候,一次性把数据放到内存会有很大弊端。这时lazy就派上用场了。
Float::INFINITY 是无穷大意思
举个例子 取出1到无穷大对7整除余数为0的前10个数值。
(1..Float::INFINITY).select { |x| x % 7 == 0 }.take(10).to_a

  这样写的话会直接卡死,这个时候用lazy

(1..Float::INFINITY).lazy.select { |x| x % 7 == 0 }.take(10).to_a

 

同样,当我们操作一个很大的文件时,直接做each_line操作会把整个文件都放到内存里。

file = File.open(xxxx, r)
file.each_line.select { |row| row.xxx }

用lazy方法会逐步加载文件。

file = File.open(xxxx, r)
file.each_line.lazy.select { |row| row }

  

关于Enumerator::lazy 详细用法:

https://railsware.com/blog/2012/03/13/ruby-2-0-enumerablelazy/

 




以上是关于ruby Enumerator::lazy的主要内容,如果未能解决你的问题,请参考以下文章

当你的类没有定义 #each 时,返回 Enumerator::Lazy 的最佳方法是啥?

ruby 我感兴趣的库中的代码片段

ruby Ruby片段

ruby 方便的片段

ruby serverspec片段

ruby 片段