Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Enumerator::Lazyクラス

class Enumerator::Lazy

クラス・モジュールの継承リスト: Enumerator::Lazy < Enumerator < Enumerable < Object < Kernel < BasicObject

要約

map や select などのメソッドの遅延評価版を提供するためのクラス。

動作は通常の Enumerator と同じですが、以下のメソッドが遅延評価を行う (つまり、配列ではなく Enumerator を返す) ように再定義されています。

Lazyオブジェクトは、Enumerable#lazyメソッドによって生成されます。

Lazyから値を取り出すには、Enumerator::Lazy#force または Enumerable#first を呼びます。



# 二乗して偶数になるような整数を、小さい方から5個表示する
p 1.step.lazy.select{|n| (n**2).even?}.first(5)
# LTSV (http://ltsv.org/) 形式のログファイルから検索を行う
# Enumerator::Lazy#map は配列ではなく Enumerator を返すため、
# 巨大な配列を確保しようとしてメモリを使い切ったりはしない
open("log.txt"){|f|
  f.each_line.lazy.map{|line|
    Hash[line.split(/\t/).map{|s| s.split(/:/, 2)}]
  }.select{|hash|
    hash["req"] =~ /GET/ && hash["status"] == "200"
  }.each{|hash|
    p hash
  }
}

特異メソッド

定義 説明
new(obj, size=nil) {|yielder, *values| ... } -> Enumerator::Lazy

Lazy Enumerator を作成します。Enumerator::Lazy#force メソッドなどによって列挙が実行されたとき、objのeachメソッドが実行され、値が一つずつブロックに渡されます。ブロックは、yielder を使って最終的に yield される値を指定できます。

インスタンスメソッド

定義 説明
chunk {|elt| ... } -> Enumerator::Lazy
chunk(initial_state) {|elt, state| ... } -> Enumerator::Lazy

Enumerable#chunk と同じですが、配列ではなく Enumerator::Lazy を返します。

map {|item| ... } -> Enumerator::Lazy
collect {|item| ... } -> Enumerator::Lazy

Enumerable#map と同じですが、配列ではなくEnumerator::Lazy を返します。

flat_map {|item| ... } -> Enumerator::Lazy
collect_concat {|item| ... } -> Enumerator::Lazy

ブロックの実行結果をひとつに繋げたものに対してイテレートするような Enumerator::Lazy のインスタンスを返します。

drop(n) -> Enumerator::Lazy

Enumerable#drop と同じですが、配列ではなくEnumerator::Lazy を返します。

drop_while {|item| ... } -> Enumerator::Lazy

Enumerable#drop_while と同じですが、配列ではなくEnumerator::Lazy を返します。

to_enum(method = :each, *args) -> Enumerator::Lazy
enum_for(method = :each, *args) -> Enumerator::Lazy
to_enum(method = :each, *args) {|*args| block} -> Enumerator::Lazy
enum_for(method = :each, *args) {|*args| block} -> Enumerator::Lazy

Object#to_enum と同じですが、Enumerator::Lazy を返します。

select {|item| ... } -> Enumerator::Lazy
find_all {|item| ... } -> Enumerator::Lazy

Enumerable#select と同じですが、配列ではなくEnumerator::Lazy を返します。

force(*args) -> [object]

全ての要素を含む配列を返します。Lazy から実際に値を取り出すのに使います。

grep(pattern) {|item| ... } -> Enumerator::Lazy

Enumerable#grep と同じですが、配列ではなくEnumerator::Lazy を返します。

lazy -> self

self を返します。

reject {|item| ... } -> Enumerator::Lazy

Enumerable#reject と同じですが、配列ではなくEnumerator::Lazy を返します。

slice_after(pattern) -> Enumerator::Lazy
slice_after {|elt| bool } -> Enumerator::Lazy

Enumerable#slice_after と同じですが、配列ではなく Enumerator::Lazy を返します。

slice_before(pattern) -> Enumerator::Lazy
slice_before {|elt| bool } -> Enumerator::Lazy
slice_before(initial_state) {|elt, state| bool } -> Enumerator::Lazy

Enumerable#slice_before と同じですが、配列ではなく Enumerator::Lazy を返します。

slice_when {|elt_before, elt_after| bool } -> Enumerator::Lazy

Enumerable#slice_when と同じですが、配列ではなく Enumerator::Lazy を返します。

take(n) -> Enumerator::Lazy

Enumerable#take と同じですが、配列ではなくEnumerator::Lazy を返します。

take_while -> Enumerator::Lazy
take_while {|item| ... } -> Enumerator::Lazy

Enumerable#take_while と同じですが、配列ではなくEnumerator::Lazy を返します。

zip(*lists) -> Enumerator::Lazy
zip(*lists) {|v1, v2, ...| ... } -> nil

Enumerable#zip と同じですが、配列ではなくEnumerator::Lazy を返します。

継承したメソッド

! != __id__ __send__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined all? any? chunk_while count cycle detect each_cons each_entry each_slice each_with_index each_with_object entries find_index first grep_v group_by include? inject max max_by min min_by minmax minmax_by none? one? partition reverse_each sort sort_by sum to_h to_set uniq each feed next next_values peek peek_values rewind size with_index with_object !~ <=> == === =~ _dump class clone define_singleton_method display eql? equal? extend freeze frozen? hash initialize initialize_copy inspect instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? send singleton_class singleton_method singleton_methods taint tainted? tap to_ary to_hash to_int to_io to_proc to_regexp to_s to_str trust untaint untrust untrusted? .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE