array = ["a","b","c"] # => ["a", "b", "c"] array # => "b" array.fetch 1 # => "b" # ================================================== # # So far, so fine. # ================================================== # array # => nil array.fetch 666 IndexError: index 666 out of array from (irb):5:in `fetch' from (irb):5 This may seem like a trival difference between the two, but I am wondering in general why they behave differently. Or in other words, why array does not return an error whereas .fetch specifically does.
on 2009-06-06 03:03
on 2009-06-06 03:40
Marc Heiler wrote: > array # => nil > whereas .fetch specifically does. You might say that's the purpose of fetch, to raise an exception for out-of-bounds indexes when  just returns nil. Pick the method you want depending on the error handling you want.
on 2009-06-06 03:51
Marc Heiler <firstname.lastname@example.org> wrote: > array # => nil > whereas .fetch specifically does. fetch is more general; if you want it to behave like () in this case, say array.fetch(666,nil). m.
on 2009-06-06 13:31
On 06.06.2009 03:03, Marc Heiler wrote: > array # => nil > whereas .fetch specifically does. I am not the author of that class so I can only speculate. The reason is to have a proper tool for different situations. Often you do not care whether the array index does exist. For example, with  you can do x =  x = 123 Without having to worry about array dimensions. If on the other hand you want to see an error if an index out of the current range is used or want to provide a default value you can use #fetch. Btw, these methods are defined with similar semantics for Hash. Kind regards robert
on 2009-06-06 19:31
Thanks to all for the explanation!
on 2009-06-06 20:01
Hi, I too learned a lot from that thread about this. Since I'm still new to ruby I've to use the docs  nearly daily. I wish this kind of "hint" would be added to both methods ... - Markus  e.g. http://www.ruby-doc.org/core/classes/Array.html