Array con indici a partire da uno


#1

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


#2

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


#3

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.


#4

se vuoi chiamare la vecchia definizione dalla nuova usa super :smiley:

2009/3/15 Matteo T. removed_email_address@domain.invalid