Kopie tablic

Witam wszystkich userow.
To moj pierwszy post na forum, nie lubie zadawac pytan, ale odpowiedzi niestety nigdzie nie znalazlem…
Do rzeczy.
Mam klase A z publiczna wartoscia @@x=“a”,“b”,“c”
W drugiej klasie B mam dwie tablice –
@Ax_orginal i @Ax_backup, gdzie @Ax_orginal = A.x i @Ax_backup=A.x,
wykonuje operacje na @Ax_orginal, po czym chce wykonac kolejne operacje ze stara wartoscia A.x, do czego uzywam tablicy @Ax_backup… Problem w tym, ze tablica @Ax_backup mimo tego ze nie wykonywalem na niej zadnych operacji, jest taka sama jak @Ax_orginal po modyfikacjach…

http://nopaste.com/p/aOJWsVAbbb <- Tu przykladowy kod z tym problemem.

Czyzby @Ax_backup i @Ax_orginal byly tylko aliasami do A.x??
Jak w takim razie stworzyc tablice o tej samej zawartosci od siebie nie zalezne?

Pozdrawiam.

kto szuka wielbłądzi…

@Ax_backup=Array.new @@Ac.x

i z deepcopy można coś takiego:

class Object def deep_copy( object ) Marshal.load( Marshal.dump( object ) ) end end

Dzieki wielkie.

Generalnie w Rubym wszystkie obiekty (bodajże prócz typów prostych, czyli liczbowych) przekazywane są przez referencję, a nie przez kopię. Jeśli więc chcesz utworzyć kopię obiektu, robisz
obiekt_kopia = obiekt_oryginalny.clone

Aha, nie dawaj zmiennym nazw z wielkiej litery - w Rubym tak oznacza się stałe.

A @@ oznacza nie instancyjną zmienną publiczną, tylko klasową / statyczną / singletonową.

Ogólnie wiesz co… zaopatrz się w jakąś dobrą książkę wyjaśniającą podstawy języka :wink: