# Can someone explain the difference: Array\[\] and Array.fetch

**URL:** <https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640>\
**Category:** Ruby\
**Created:** [June 6, 2009, 3:03am UTC](https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640 "2009-06-06T03:03:26Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [June 6, 2009, 3:03am UTC](https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640/1 "2009-06-06T03:03:26Z")

</div>

array = [“a”,“b”,“c”] # =\> [“a”, “b”, “c”]  
array[1] # =\> “b”  
array.fetch 1 # =\> “b”

# ==================================================

# So far, so fine.

# ==================================================

array[666] # =\> 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.

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [June 6, 2009, 3:40am UTC](https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640/2 "2009-06-06T03:40:47Z")

</div>

Marc H. wrote:

> array[666] # =\> 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.

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [June 6, 2009, 3:51am UTC](https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640/3 "2009-06-06T03:51:24Z")

</div>

Marc H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> array[666] # =\> 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.

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [June 6, 2009, 1:31pm UTC](https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640/4 "2009-06-06T13:31:00Z")

</div>

On 06.06.2009 03:03, Marc H. wrote:

> array[666] # =\> 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[10] = 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

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [June 6, 2009, 8:01pm UTC](https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640/5 "2009-06-06T20:01:52Z")

</div>

Hi,

I too learned a lot from that thread about this. Since I’m still new to  
ruby I’ve to use the docs [1] nearly daily. I wish this kind of “hint”  
would be added to both methods …

- Markus

[1] e.g. [class Array - RDoc Documentation](http://www.ruby-doc.org/core/classes/Array.html)

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [June 6, 2009, 7:31pm UTC](https://www.ruby-forum.com/t/can-someone-explain-the-difference-array-and-array-fetch/169640/6 "2009-06-06T19:31:42Z")

</div>

Thanks to all for the explanation!
