Inicializācija un inicializācijas metode

01

no 02

Inicializācija un inicializācijas metode

Mācības Ruby on Rails: Spēlē ar irb
brnzwngs / Flikr / CC BY 2.0

Kad jūs definējat klasi Ruby, Ruby piešķir tai jaunu klases objektu klases nosaukuma konstante. Piemēram, ja jūs teiktu klases cilvēks; beigas, tas ir aptuveni līdzvērtīgs Persona = Klase.jauns. Šīs klases objekts ir tipa Klase, un tajā ir vairākas metodes, kas noderīgas šo gadījumu kopiju veidošanai.

02

no 02

Gadījumu veidošana

Lai izveidotu jaunu klases gadījumu, piezvaniet uz šīs klases numuru jauns metode. Pēc noklusējuma tas piešķirs klasei nepieciešamo atmiņu un atgriezīs atsauci uz jauno objektu. Tātad, ja jūs veidotu jaunu Persona klase, jūs zvanītu Persona.jauns.

Lai gan sākumā tas šķiet mazliet atpakaļ, tā nav jauns atslēgvārds rubīnā vai jebkura īpaša sintakse. Jauni objekti tiek izveidoti, izmantojot parasto metodi, kas, sakot un darot, dara salīdzinoši vienkāršas lietas.

Gadījumu inicializēšana

Tukšs objekts nav īpaši aizraujošs. Lai sāktu izmantot savu objektu, tas vispirms jāinicializē (pieņemot, ka tam ir kāds)

instagram viewer
gadījumu mainīgie kas jāinicializē). Tas tiek darīts, izmantojot palaist metode. Rubīns nodos visus argumentus, kuriem jūs nodosit SomeClass.new uz palaist uz jauno objektu. Pēc tam objekta stāvokļa inicializēšanai varat izmantot parasto mainīgo piešķiršanu un metodes. Šajā piemērā a Persona klase tiek uzrādīta kura palaist metode izmantos nosaukuma un vecuma argumentu un piešķirs tos instanču mainīgajiem.

klase Persona def inicializēšana (vārds, vecums) @vārds, @age = vārds, vecuma beigas beigas bob = Person.new ('Bobs', 34 gadi)

Varat arī izmantot šo iespēju, lai iegūtu visus nepieciešamos resursus. Atvērts tīkls rozetes, atveriet failus, izlasiet visus nepieciešamos datus utt. Vienīgais brīdinājums ir tas, ko cilvēki parasti negaida palaist metodes, lai izgāztos. Noteikti dokumentējiet visas iespējamās kļūmes palaist metodes pamatīgi.

Objektu noteikšana

Kopumā objektus Rubīnā neiznīcini. Ja jūs ieradāties no C ++ vai citas valodas bez atkritumu savācēja, tas varētu šķist dīvaini. Bet rubīnā (un lielākajā daļā citu atkritumu savākto valodu) jūs neiznīcinat objektus, jūs vienkārši pārstājat uz to atsaukties. Nākamajā atkritumu savākšanas ciklā jebkurš priekšmets, uz kuru nekas nenorāda, tiks automātiski iznīcināts. Ir dažas kļūdas ar apļveida atsaucēm, taču kopumā tas darbojas nevainojami, un jums pat nav nepieciešams “iznīcinātājs”.

Ja jums ir jautājums par resursiem, neuztraucieties par to. Iznīcinot objektu, kurā atrodas resurss, resurss tiks atbrīvots. Atvērtie faili un tīkla savienojumi tiks slēgti, atmiņa tiek iedalīta utt. Tikai tad, ja jūs iedalīsit resursus C paplašinājumā, jums patiešām būs jāuztraucas par resursu sadali. Lai arī nav garantijas, kad atkritumu savācējs tiks palaists. Resursu izvietošanai a savlaicīgi mēģiniet tos atbrīvot manuāli.

Objektu kopiju izgatavošana

Rubīns ir garām ar atsauci. Ja nododat atsauci uz objektu a metode, un šī metode izsauc metodi, kas izmaina šī objekta stāvokli, var rasties neparedzētas sekas. Turklāt metodes var saglabāt atsauci uz objektu, lai modificētu daudz vēlāk, izraisot kļūdas novēlotu efektu. Lai no tā izvairītos, Rubīns nodrošina dažas metodes objektu kopēšanai.

Lai kopētu jebkuru objektu, vienkārši piezvaniet daži_objekti.dup metode. Tiks piešķirts jauns objekts, un visi objekta instanču mainīgie tiks kopēti. Tomēr, no tā vajadzēja izvairīties, kopējot gadījumu mainīgos, tas ir tas, ko sauc par “seklu kopiju”. Ja jums bija jātur fails instanču mainīgajā, abi dublētie objekti tagad atsaucas uz vienu un to pašu failu.

Pirms lietojat, vienkārši ņemiet vērā, ka kopijas ir seklas dup metode. Skatiet rakstu Dziļu kopiju izgatavošana rubīnā lai iegūtu vairāk informācijas.