 
 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!"] |