02.09.06
Ruby: (Dubinski) Kopiraj objekt
Želio sam napraviti objekt. Zatim ga kopirati. Zatim promijeniti kopiju bez mijenjanja izvornika. Ali nisam znao kako. Kad god nešto ne znam, pitam wtr-general listu. Poslao sam pitanje. Pa sam pomislio da bi bilo lijepo kad bi objasnio zašto želim kopirati objekt. Ali, objašnjenje se odužilo, pa sam ga stavio na moj blog.
Dobio sam odgovor. “Probaj Object#clone”. Može li biti tako jednostavno?! Može. Ipak, to je Ruby. Ali ne, nije tako jednostavno. Nije radilo. Izvorni objekt se mijenjao sa svojim duplikatom.
Rezulat:
#<Page:0x2820ae0 @url="app.com/view.aspx", @texts=["File > View", "File added."]>
#<Page:0×2820a98 @url=”app.com/view.aspx”, @texts=["File > View", "File added."]>
Ali sad sam znao gdje gledati. Upisao sam “ri Object#clone” i “ri Object#dup” u Command Prompt (čak sam pogledao i na http://www.ruby-doc.org/core/). Kaže (na oba mjesta, i za Object#clone i za Object#dup):
“Proizvodi plitku kopiju objekta - kopiraju se objektove varijable instance (kako ovo prevesti?), ali ne i objekt na kojeg se odnose.”
Dakle, stvara “plitku” kopiju. To mi ne treba. Trebam “pravu” kopiju.
Google mi je pomogao. Potražio sam “ruby copy object” i našao http://www.rubygarden.org/ruby?Make_A_Deep_Copy_Of_An_Object.
Tajna riječ je “dubinsko” kopiranje.
Dodao sam ovo klasi Page (i zamijenio page_view.clone sa page_view.deep_clone) i dobio sam što sam trebao!
Rezulat:
#<Page:0x4c1dd10 @url="app.com/view.aspx", @texts=["File > View"]>
#<Page:0×4c1dc50 @url=”app.com/view.aspx”, @texts=["File > View", "File added."]>
Ne razumijem kako radi, i nije me briga, sve dok radi.

