Archive for the ‘Hrvatski (Croatian)’ Category
TortoiseSVN 1.4.1 se ruši
Upravo sam instalirao TortoiseSVN 1.4.1 i stalno se ruši. Update, commit, bilo što. Kad sam vratio na 1.4.0 sve radi kako treba.
Pitati pametno
Svi koji koristimo open souce (Ruby, Watir…) (i ne samo mi) trebali bi znati kako pitati pametno (tako da dobiješ odgovor).
Chris McMahon je to spomenuo na wtr-general listi.
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.
class Page
attr_accessor :texts
def initialize(url, texts)
@url, @texts = url, texts
end
end
page_view = Page.new(“app.com/view.aspx”, ["File > View"])
page_view_after_add = page_view.clone
page_view_after_add.texts < < "File added."
puts page_view.inspect
puts page_view_after_add.inspect
Rezulat:
#<Page:0x2820ae0 @url=”app.com/view.aspx”, @texts=["File > View", "File added."]>
#<Page:0x2820a98 @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!
def deep_clone
Marshal::load(Marshal.dump(self))
end
Rezulat:
#<Page:0x4c1dd10 @url="app.com/view.aspx", @texts=["File > View"]>
#<Page:0x4c1dc50 @url="app.com/view.aspx", @texts=["File > View", "File added."]>
Ne razumijem kako radi, i nije me briga, sve dok radi.
