當一個很大的數組或集合須要作循環操做的時候,一次性把數據放到內存會有很大弊端。這時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/