Instantiation и методът на инициализация

01

от 02

Instantiation и методът на инициализация

Учене на Ruby on Rails: Игра с irb
brnzwngs / Flikr / CC BY 2.0

Когато дефинирате клас в Ruby, Ruby ще присвои нов клас обект на константа на име на клас. Например, ако искате да кажете клас човек; край, това е приблизително еквивалентно на Лице = Class.new. Този клас обект е от типа класи притежава редица методи, полезни за създаване на копия на тези копия.

02

от 02

Правене на инстанции

За да направите нов екземпляр от клас, обадете се на този клас нов метод. По подразбиране това ще разпредели нужната памет за класа и ще върне препратка към новия обект. Така че, ако трябваше да направите нов екземпляр на човек клас, бихте се обадили Person.new.

Докато в началото това изглежда малко назад, няма нов ключова дума в Ruby или някакъв специален синтаксис. Новите обекти се създават чрез нормален метод, който, всичко казано и направено, прави сравнително прости неща.

Инициализиране на инстанции

Празен обект не е много вълнуващ. За да започнете да използвате вашия обект, той първо трябва да бъде инициализиран (ако приемем, че има такъв

instagram viewer
примерни променливи което се нуждае от инициализиране). Това става чрез инициализиране метод. Ruby ще предаде всички аргументи, на които преминавате SomeClass.new на инициализиране върху новия обект. След това можете да използвате нормални назначения и методи за променливи, за да инициализирате състоянието на обекта. В този пример, a човек клас е представен чия инициализиране метод ще вземе аргумент за име и възраст и ще ги присвои на променливи инстанции.

клас Person def инициализира (име, възраст) @ име, @age = име, край край bob = Person.new ('Боб', 34)

Можете също да използвате тази възможност за придобиване на всякакви ресурси, които може да са ви необходими. Отворена мрежа гнезда, отворете файлове, прочетете всички необходими данни и т.н. Единственото предупреждение е, че хората обикновено не очакват инициализиране методи за неуспех. Не забравяйте да документирате евентуално неуспешен инициализиране методи старателно.

Дестинация на обекти

По принцип не унищожавате обекти в Ruby. Ако идвате от C ++ или друг език без боклук, това може да изглежда странно. Но в Ruby (и повечето други събрани боклуци езици), вие не унищожавате предмети, просто спирате да го отнасяте. При следващия цикъл за събиране на боклука всеки обект без нищо, отнасящ се до него, ще бъде унищожен автоматично. Има някои грешки с кръгли препратки, но като цяло това работи безотказно и дори не се нуждаете от „разрушител“.

Ако се чудите за ресурси, не се притеснявайте за това. Когато обектът, който държи ресурса, е унищожен, ресурсът ще бъде освободен. Отворените файлове и мрежовите връзки ще бъдат затворени, паметта раздадена и т.н. Само ако разпределите някакви ресурси в разширение C, наистина ще трябва да се притеснявате за разместване на ресурси. Въпреки че няма гаранция кога ще бъде пуснат боклукът. За да се разпределят ресурси в a навременен опитайте да ги освободите ръчно.

Правене на копия на обекти

Ruby се препраща за справка. Ако препратите препратка към обект към a методи този метод извиква метод, който променя състоянието на този обект, могат да възникнат нежелани последствия. Освен това, методите могат след това да запазят препратката към обекта за промяна в много по-късен период, причинявайки забавен ефект за грешката. За да избегне това, Ruby предоставя някои методи за дублиране на обекти.

За да дублирате всеки обект, просто се обадете на some_object.dup метод. Ще бъде разпределен нов обект и всички променливи на инстанцията на обекта ще бъдат копирани. Това обаче трябваше да се избегне копирането на променливи на инстанции: това се нарича "плитко копие." ако трябваше да държите файл в променлива на инстанция, и двата дублирани обекта вече се отнасят до същите файл.

Само не забравяйте, че копията са плитки копия, преди да използвате мезонети, метод. Вижте статията Правене на дълбоки копия в Ruby за повече информация.

instagram story viewer