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/