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
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
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.
se vuoi chiamare la vecchia definizione dalla nuova usa super
2009/3/15 Matteo T. [email protected]