Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Ruby2.0新規要素 | lazy

概要

lazy

詳細

Enumerable#lazyによって遅延評価が可能になりました。
これによって、普通に処理すると無限ループしてしまうような内容に
対応することが可能になる。

サンプルコード
# encoding: utf-8
require 'prime'

# 1から始まる整数の最初の10個の奇数を取得
$><<(1..Float::INFINITY).lazy.select { |v|v.odd? }.take(10).to_a
puts
# 1から始まる整数の最初の10個の偶数を取得
$><<(1..Float::INFINITY).lazy.select { |v|v.even? }.take(10).to_a
puts
# 1から始まる整数の最初の10個の素数を取得
$><<(1..Float::INFINITY).lazy.select { |v|v.prime? }.take(10).to_a
puts
# 1から始まる整数の最初の10個の合成数もしくは単数を取得
$><<(1..Float::INFINITY).lazy.select { |v|!v.prime? }.take(10).to_a
出力
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
[1, 4, 6, 8, 9, 10, 12, 14, 15, 16]