Инстанциация и метод инициализации

01

из 02

Инстанциация и метод инициализации

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

Когда вы определяете класс в Ruby, Ruby назначит новый объект класса константа имени класса. Например, если бы вы сказали классная персона; конецэто примерно эквивалентно Person = Class.new. Этот объект класса имеет тип Учебный класси содержит ряд методов, полезных для создания копий этих экземпляров.

02

из 02

Создание экземпляров

Чтобы создать новый экземпляр класса, вызовите этот класс новый метод. По умолчанию это выделит требуемую память для класса и вернет ссылку на новый объект. Итак, если бы вы сделали новый экземпляр Человек класс, вы бы позвонили Person.new.

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

Инициализация Экземпляров

Пустой объект не очень захватывающий. Чтобы начать использовать ваш объект, он должен быть инициализирован (при условии, что он

instagram viewer
переменные экземпляра что требует инициализации). Это делается через Initialize метод. Руби передаст любые аргументы, которые вы передаете SomeClass.new на Initialize на новом объекте. Затем вы можете использовать обычные присвоения переменных и методы для инициализации состояния объекта. В этом примере Человек класс представлен чей Initialize Метод примет аргумент name и age и назначит их переменным экземпляра.

class Person def initialize (имя, возраст) @name, @age = имя, возраст и конец, конец bob = Person.new ('Bob', 34)

Вы также можете использовать эту возможность для приобретения любых ресурсов, которые могут вам понадобиться. Открытая сеть Розеткиоткрывать файлы, читать любые нужные данные и т. д. Единственное предостережение в том, что люди обычно не ожидают Initialize методы потерпеть неудачу. Обязательно документируйте возможные ошибки Initialize методы тщательно.

Уничтожение объектов

Как правило, вы не уничтожаете объекты в Ruby. Если вы используете C ++ или другой язык без сборщика мусора, это может показаться странным. Но в Ruby (и большинстве других языков для сборки мусора) вы не уничтожаете объекты, вы просто перестаете ссылаться на них. В следующем цикле сборки мусора любой объект, на который нет ссылок, будет уничтожен автоматически. Есть некоторые ошибки с круговыми ссылками, но в целом это работает безупречно, и вам даже не нужен «деструктор».

Если вас интересуют ресурсы, не беспокойтесь об этом. Когда объект, содержащий ресурс, будет уничтожен, ресурс будет освобожден. Открытые файлы и сетевые подключения будут закрыты, память будет освобождена и т. Д. Только если вы выделите какие-либо ресурсы в расширении C, вам действительно придется беспокоиться об освобождении ресурсов. Хотя нет гарантии, когда будет запущен сборщик мусора. Для того, чтобы освободить ресурсы в своевременно таким образом, попробуйте освободить их вручную.

Изготовление копий объектов

Рубин передается по ссылке. Если вы передаете ссылку на объект методи этот метод вызывает метод, который изменяет состояние этого объекта, могут возникнуть непредвиденные последствия. Кроме того, методы могут затем сохранить ссылку на объект для изменения в более позднее время, что приводит к задержке эффекта для ошибки. Чтобы избежать этого, Ruby предоставляет несколько методов для дублирования объектов.

Чтобы дублировать любой объект, просто вызовите some_object.dup метод. Будет выделен новый объект, и все переменные экземпляра объекта будут скопированы. Однако этого следует избегать путем копирования переменных экземпляра: это называется «мелкой копией». Если вы должны были держать файл в переменной экземпляра, оба дублированных объекта теперь будут ссылаться на один и тот же файл.

Просто имейте в виду, что копии являются мелкими копиями, прежде чем использовать дубликат метод. Смотреть статью Создание глубоких копий в Ruby Чтобы получить больше информации.

instagram story viewer