a = []
[]
a.each
#<Enumerator: []:each>
[].each
#<Enumerator: []:each>
p a
a
[]
[]
[].each
#<Enumerator: []:each>
{}.each
#<Enumerator: {}:each>
p (1..10).each
''.each_char
#<Enumerator: 1..10:each>
#<Enumerator: "":each_char>
10.times
#<Enumerator: 10:times>
loop
#<Enumerator: main:loop>
p [1, 2, 3].to_enum
'Alice'.enum_for(:each_char)
#<Enumerator: [1, 2, 3]:each>
#<Enumerator: "Alice":each_char>
lines = <<EOM
Alice
Bob
Charlie
EOM
p enum = lines.each_line
p enum.map {|line| line.length}
#<Enumerator: "Alice\nBob\nCharlie\n":each_line> [6, 4, 8]
[6, 4, 8]
enum.map
#<Enumerator: #<Enumerator: "Alice\nBob\nCharlie\n":each_line>:map>
%w(Alice Bob Charlie).each.with_index do |n, i|
puts "#{i}: #{n}"
end
0: Alice 1: Bob 2: Charlie
["Alice", "Bob", "Charlie"]
%w(Mario Luige Link).select.with_index {|n, i|
i > 0
}
["Luige", "Link"]
enum = [4, 4, 2, 3].to_enum
p enum.next
p enum.next
p enum.next
4 4 2
2
enum.rewind
enum.next
4
enum.rewind
loop do
puts enum.next
end
4 4 2 3
[4, 4, 2, 3]
people = %w(A B C).to_enum
ages = [14, 32, 28].to_enum
loop do
person = people.next
age = ages.next
puts "#{person} (#{age})"
end
A (14) B (32) C (28)
["A", "B", "C"]
people.zip(ages).each do |p, a|
puts "#{p} (#{a})"
end
A (14) B (32) C (28)
[["A", 14], ["B", 32], ["C", 28]]
people.zip(ages).to_enum
#<Enumerator: [["A", 14], ["B", 32], ["C", 28]]:each>
people.zip(ages) do |p, a|
puts "#{p} (#{a})"
end
# メモリは食ってる?
A (14) B (32) C (28)
enum = %w(Alice Bob Charlie).select
loop do
begin
person = enum.next
enum.feed /li/ === person
rescue StopIteration => e
p e.result
break
end
end
["Alice", "Charlie"]
enum = %w(Alice Bob Charlie).select
loop do
begin
person = enum.next
enum.feed person.size < 4
rescue StopIteration => e
p e.result
break
end
end
["Bob"]
次回は "5-5-5 Enumrator::Lazy" から