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操做会把整个文件都放到内存里。ruby

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

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

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

  

关于Enumerator::lazy 详细用法:code

https://railsware.com/blog/2012/03/13/ruby-2-0-enumerablelazy/
相关文章
相关标签/搜索