# Array con indici a partire da uno

**URL:** <https://www.ruby-forum.com/t/array-con-indici-a-partire-da-uno/162907>\
**Category:** IT\
**Created:** [March 15, 2009, 3:24pm UTC](https://www.ruby-forum.com/t/array-con-indici-a-partire-da-uno/162907 "2009-03-15T15:24:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![net-level](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3ec8ea/32.png) [@net-level](https://www.ruby-forum.com/u/net-level)\
**Post date:** [March 15, 2009, 3:24pm UTC](https://www.ruby-forum.com/t/array-con-indici-a-partire-da-uno/162907/1 "2009-03-15T15:24:27Z")

</div>

buongiorno,

vedendo la possibilitÃ in ruby di riaprire classi e modificare in  
real-time la core del linguaggio ho voluto provare una cosa semplice  
come far partire gli array da 1 fino a n, e non 0, n - 1

Io ho provato cosÃ¬:

class Array  
def   
return self[i - 1]  
end  
def []=(i, v)  
self[i - 1] = v  
end  
end

e poi uso

l = Array.new(2)  
l[1] = 1  
l[2] = 2  
puts l[1], l[2]

ma cosÃ¬ mi da un errore del tipo “stack level too deep”

grazie

---

<div class="post-metadata">

**Author:** ![net-level](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3ec8ea/32.png) [@net-level](https://www.ruby-forum.com/u/net-level)\
**Post date:** [March 15, 2009, 3:52pm UTC](https://www.ruby-forum.com/t/array-con-indici-a-partire-da-uno/162907/2 "2009-03-15T15:52:03Z")

</div>

Matteo T. wrote:

> ma così mi da un errore del tipo “stack level too deep”  
> Perché invochi i metodi [] e []= dentro la loro definizione, quindi  
> effettuano una ricorsione infinita. Prova con:

class Array  
def   
at(i + 1)  
end

def []=(i, v)  
insert(i + 1, v)  
end  
end

Luca

---

<div class="post-metadata">

**Author:** ![net-level](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3ec8ea/32.png) [@net-level](https://www.ruby-forum.com/u/net-level)\
**Post date:** [March 15, 2009, 4:07pm UTC](https://www.ruby-forum.com/t/array-con-indici-a-partire-da-uno/162907/3 "2009-03-15T16:07:33Z")

</div>

Luca G. wrote:

> Matteo T. wrote:
> 
> > ma cosï¿½ mi da un errore del tipo “stack level too deep”  
> > Perchï¿½ invochi i metodi [] e []= dentro la loro definizione, quindi  
> > effettuano una ricorsione infinita. Prova con:
> 
> class Array  
> def   
> at(i + 1)  
> end
> 
> def []=(i, v)  
> insert(i + 1, v)  
> end  
> end
> 
> Luca

grazie ora funziona.  
pensavo che usando dentro la ridefinizione gli operatori richiamasse la  
vecchia versione.

---

<div class="post-metadata">

**Author:** ![net-level](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3ec8ea/32.png) [@net-level](https://www.ruby-forum.com/u/net-level)\
**Post date:** [March 15, 2009, 4:27pm UTC](https://www.ruby-forum.com/t/array-con-indici-a-partire-da-uno/162907/4 "2009-03-15T16:27:12Z")

</div>

se vuoi chiamare la vecchia definizione dalla nuova usa super 😃

2009/3/15 Matteo T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
