01
av 02
Instantiation og initialiseringsmetoden
Når du definerer en klasse i Ruby, vil Ruby tilordne et nytt klasseobjekt til klassens navn konstant. For eksempel hvis du skulle sagt det klasse Person; slutt, dette tilsvarer omtrent Person = klasse.nytt. Dette klasseobjektet er av typen Klasse, og inneholder en rekke metoder som er nyttige for å lage forekomster av kopier av disse forekomstene.
02
av 02
Å lage forekomster
For å lage en ny forekomst av en klasse, ring den klassens ny metode. Som standard tildeler dette ønsket minne for klassen og returnerer en referanse til det nye objektet. Så hvis du skulle lage en ny instans av Person klasse, vil du ringe Person.new.
Selv om dette i begynnelsen virker litt baklengs, er det ingen ny nøkkelord i Ruby eller hvilken som helst spesiell syntaks. Nye objekter skapes ved en normal metode som alt sagt og gjort relativt enkle ting.
Initialisere forekomster
Et tomt objekt er ikke veldig spennende. For å begynne å bruke objektet ditt, må det først initialiseres (forutsatt at det har noen
forekomstvariabler som må initialiseres). Dette gjøres via Initial metode. Ruby vil gi alle argumenter du sender til SomeClass.new videre til Initial på det nye objektet. Du kan deretter bruke normale variabeloppgaver og metoder for å initialisere objektets tilstand. I dette eksemplet, a Person klassen blir presentert hvis Initial metoden tar et navn og aldersargument og tilordner dem forekomstvariabler.class Person def initialize (name, age) @name, @age = name, age end end bob = Person.new ('Bob', 34)
Du kan også bruke denne muligheten til å skaffe deg ressurser du måtte trenge. Åpent nettverk stikkontakter, åpne filer, lese inn data du trenger osv. Det eneste forbeholdet er at folk generelt ikke forventer Initial metoder for å mislykkes. Sørg for å dokumentere eventuelle feil Initial metoder grundig.
Ødeleggende objekter
Generelt ødelegger du ikke gjenstander i Ruby. Hvis du kommer fra C ++ eller et annet språk uten en søppelsamler, kan dette virke rart. Men i Ruby (og de fleste andre søppelinnsamlede språk) ødelegger du ikke gjenstander, du slutter ganske enkelt å referere til det. På neste søppelsamlingssyklus blir ethvert objekt uten noe som refererer til det automatisk ødelagt. Det er noen feil med sirkulære referanser, men generelt fungerer dette feilfritt, og du trenger ikke en "destruktør."
Hvis du lurer på ressurser, ikke bekymre deg for det. Når objektet som holder ressursen blir ødelagt, blir ressursen frigjort. Åpne filer og nettverkstilkoblinger vil bli lukket, minnet omplassert osv. Bare hvis du tildeler ressurser i en C-utvidelse, trenger du virkelig å bekymre deg for omfordeling av ressurser. Selv om det ikke er noen garanti for når søppelsamleren skal kjøres. For å fordele ressursene i en betimelig må du prøve å frigjøre dem manuelt.
Lage kopier av objekter
Ruby er pass ved referanse. Hvis du gir en referanse til et objekt til en metode, og den metoden kaller en metode som endrer tilstanden til objektet, utilsiktede konsekvenser kan oppstå. Videre kan metoder deretter lagre referansen til objektet for å modifisere seg på et mye senere tidspunkt, og forårsake en forsinket effekt for feilen. For å unngå dette, tilbyr Ruby noen metoder for å duplisere objekter.
For å duplisere ethvert objekt, bare ring some_object.dup metode. Et nytt objekt vil bli tildelt, og alle objektets forekomstvariabler blir kopiert over. Imidlertid er kopieringsforekomstvariabler hva dette skulle unngå: dette er det som kalles en "grunne kopi." Hvis du skulle holde en fil i en forekomstvariabel, begge dupliserte objektene vil nå referere til det samme fil.
Bare vær oppmerksom på at kopiene er grunne kopier før du bruker den DUP metode. Se artikkelen Lage dype kopier i Ruby for mer informasjon.