This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Changing the Way an Object Iterates | ||
|---|---|---|
| Code | Expected | Actual |
array = %w{bob loves alice}
array.collect { |x| x.capitalize } |
["Bob", "Loves", "Alice"] | ["Bob", "Loves", "Alice"] |
array.collect_reverse { |x| x.capitalize } |
["Alice", "Loves", "Bob"] |
Error! (Exception?) Here's stdout: NoMethodError: undefined method `collect_reverse' for ["bob", "loves", "alice"]:Array from (irb):3 |
require 'enumerator'
reversed_array = array.to_enum(:reverse_each)
reversed_array.collect { |x| x.capitalize } |
["Alice", "Loves", "Bob"] | ["Alice", "Loves", "Bob"] |
reversed_array.each_with_index do |x, i|
puts %{#{i}=>"#{x}"}
end |
0=>"alice" 1=>"loves" 2=>"bob" |
0=>"alice" 1=>"loves" 2=>"bob" |
reversed_array[0] |
NoMethodError: undefined method `[]' for #<Enumerable::Enumerator:0xb7c2cc8c> |
Error! (Exception?) Here's stdout: NoMethodError: undefined method `[]' for #<Enumerable::Enumerator:0xb7c2c854> from (irb):10 |
array_with_index = array.enum_with_index
array_with_index.each do |x, i|
puts %{#{i}=>"#{x}"}
end |
0=>"bob" 1=>"loves" 2=>"alice" |
0=>"bob" 1=>"loves" 2=>"alice" |
array_with_index.each_with_index do |x, i|
puts %{#{i}=>#{x.inspect}}
end |
0=>["bob", 0] 1=>["loves", 1] 2=>["alice", 2] |
0=>["bob", 0] 1=>["loves", 1] 2=>["alice", 2] |
sentence = %w{Well, now I've seen everything!}
two_word_window = sentence.to_enum(:each_cons, 2)
two_word_window.each { |x| puts x.inspect } |
["Well,", "now"] ["now", "I've"] ["I've", "seen"] ["seen", "everything!"] |
["Well,", "now"] ["now", "I've"] ["I've", "seen"] ["seen", "everything!"] |
two_words_at_a_time = sentence.to_enum(:each_slice, 2)
two_words_at_a_time.each { |x| puts x.inspect } |
["Well,", "now"] ["I've", "seen"] ["everything!"] |
["Well,", "now"] ["I've", "seen"] ["everything!"] |