Instantiation og initialiseringsmetoden

click fraud protection

01

af 02

Instantiation og initialiseringsmetoden

Læring Ruby on Rails: Leger med irb
brnzwngs / Flikr / CC BY 2.0

Når du definerer en klasse i Ruby, tildeler Ruby et nyt klasseobjekt til klassens navn konstant. For eksempel hvis du skulle sige det klasse Person; ende, svarer det stort set til Person = Klasse.nyt. Dette klasseobjekt er af typen klasse, og indeholder en række metoder, der er nyttige til at fremstille eksempler på kopier af disse tilfælde.

02

af 02

At fremstille tilfælde

Hvis du vil oprette en ny forekomst af en klasse, skal du ringe til den klasses ny metode. Som standard tildeler dette den krævede hukommelse til klassen og returnerer en henvisning til det nye objekt. Så hvis du skulle lave en ny instans af Person klasse, ville du ringe Person.new.

Selvom det i første omgang virker lidt baglæns, er der ingen ny nøgleord i Ruby eller en hvilken som helst speciel syntaks. Nye objekter oprettes ved en normal metode, der alt sammen siger og gør, gør relativt enkle ting.

Initialisering af forekomster

Et tomt objekt er ikke særlig spændende. For at begynde at bruge dit objekt, skal det først initialiseres (forudsat at det har et

instagram viewer
forekomstvariabler der skal initialiseres). Dette gøres via initialisere metode. Ruby videregiver alle argumenter, du sender til SomeClass.newinitialisere på det nye objekt. Du kan derefter bruge normale variabeltildelinger og metoder til at initialisere objektets tilstand. I dette eksempel a Person klassen præsenteres hvis initialisere metoden tager et navn og aldersargument og tildeler dem til forekomstvariabler.

klasse Person def initialiserer (navn, alder) @ navn, @age = navn, alders slutning bob = Person.nyt ('Bob', 34)

Du kan også bruge denne mulighed til at erhverve de ressourcer, du har brug for. Åbn netværk stikkontakter, åbne filer, læse de nødvendige data osv. Den eneste advarsel er, at folk generelt ikke forventer initialisere metoder til at mislykkes. Sørg for at dokumentere eventuelt mislykkede initialisere metoder grundigt.

Ødelægger objekter

Generelt ødelægger du ikke genstande i Ruby. Hvis du kommer fra C ++ eller et andet sprog uden en skraldesamler, kan dette virke underligt. Men i Ruby (og de fleste andre spildopsamlede spild) ødelægger du ikke genstande, du holder bare op med at henvise til det. I den næste affaldsopsamlingscyklus ødelægges ethvert objekt uden noget, der henviser til det, automatisk. Der er nogle bugs med cirkulære referencer, men generelt fungerer dette fejlfrit, og du har ikke engang brug for en "destruktør."

Hvis du undrer dig over ressourcer, skal du ikke bekymre dig om det. Når objektet, der holder ressourcen, ødelægges, frigøres ressourcen. Åbne filer og netværksforbindelser lukkes, hukommelse tildeles osv. Kun hvis du tildeler ressourcer i en C-udvidelse, skal du virkelig bekymre dig om omfordeling af ressourcer. Selvom der ikke er nogen garanti for, hvornår affaldsopsamleren køres. For at omfordele ressourcerne i en rettidig måde, prøv at frigøre dem manuelt.

Oprettelse af kopier af objekter

Ruby er ved reference. Hvis du sender en henvisning til et objekt til en metode, og den metode kalder en metode, der ændrer objektets tilstand, der kan forekomme utilsigtede konsekvenser. Yderligere kan metoder derefter gemme henvisningen til objektet til ændring på et meget senere tidspunkt, hvilket forårsager en forsinket effekt for fejlen. For at undgå dette giver Ruby nogle metoder til at duplikere objekter.

For at kopiere ethvert objekt skal du blot ringe til some_object.dup metode. Et nyt objekt tildeles, og alle objektets instansvariabler kopieres. Imidlertid kopierer forekomstvariabler, hvad dette skulle undgå: det er det, der kaldes en "lav kopi." Hvis du skulle have en fil i en forekomstvariabel, begge duplikerede objekter henviser nu til det samme fil.

Bare vær opmærksom på, at kopierne er lave kopier, før du bruger dUP metode. Se artiklen Oprettelse af dybe kopier i Ruby for mere information.

instagram story viewer