メモ:Enumerator

似てるけど大きな違い。メソッドが何を返すか気をつけよう。

Enumeratorオブジェクトを返すメソッドは、もっとあっても良いと思う。
id:ku-ma-meさんのmame/enumerabler · GitHubとか採用されるといいな。

# ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

num = 10

puts num.downto( 1 ).map{ |n| "*" * n }   # Case.1
num.downto( 1 ).map{ |n| puts "*" * n }   # Case.2

num = 2**16

#puts num.downto( 1 ).map{ |n| "*" * n }  # => `*': failed to allocate memory (NoMemoryError)
#num.downto( 1 ).map{ |n| puts "*" * n }  # Case.2

num = 10

# Case.1
enum = num.downto( 1 ).map
fmt  = lambda{ |n| "*" * n }
data = enum.each( &fmt )
puts data

# Case.2
enum = num.downto( 1 ).map
out  = lambda{ |n| puts "*" * n }
enum.each( &out )

num = 2**16

# Case.1
#enum = num.downto( 1 ).map
#fmt  = lambda{ |n| "*" * n }
#data = enum.each( &fmt )  # => `*': failed to allocate memory (NoMemoryError)
#puts data

# Case.2
#enum = num.downto( 1 ).map
#out  = lambda{ |n| puts "*" * n }
#enum.each( &out )