Evgenii Legotckoi
Evgenii Legotckoi26 августа 2016 г. 13:52

User Guide #27 - Ruby - Инициализация объектов

В нашем классе Fruit из предыдущей главы есть @-переменные: первая описывает вид фрукта, вторая - его состояние.  Только после написания своего специализированного метода

inspect
для этого класса, мы осознали, что для любого фрукта отсутствие заданных характеристик бессмысленно.  К счастью, в Ruby есть способ гарантировать, что @-переменные всегда будут инициализированы.

Метод
initialize

Когда Ruby создает новый объект, он ищет в описании класса метод

initialize
и вызывает его.  Таким образов, простая вещь, которую мы можем проделать,- это использовать
initialize
для задания всем @-переменным значений "по-умолчанию", так что теперь "методу
inspect
всегда есть что сказать". ;-)

ruby> **class Fruit**
    |**def initialize**
    |**@kind = "apple"**
    |**@condition = "ripe"**
    |**end**
    | **end**
**nil**
ruby> **f4 = Fruit.new**
**"a ripe apple"**

От предположения к требованию

Бывает, что задавать значения "по-умолчанию" бессмысленно. Существует ли в природе такая вещь, как "фрукт по умолчанию"?  наверное, будет предпочтительно, чтобы вид каждого фрукта задавался во время его создания.  для этого необходимо ввести формальный аргумент в метод

initialize
.  Мы не будем здесь вдаваться в причину почему, но аргументы, которые мы задаем в вызове метода
new
на самом деле передаются в метод
initialize
.

ruby> **class Fruit**
    |**def initialize( k )**
    |**@kind = k**
    |**@condition = "ripe"**
    |**end**
    | **end**
**nil**
ruby> **f5 = Fruit.new "mango"**
**"a ripe mango"**
ruby> **f6 = Fruit.new**
**ERR: (eval):1:in `initialize': wrong # of arguments(0 for 1)**

Гибкая инициализация

Как видно из примера выше, если с методом

initialize
ассоциирован аргумент, то его при создании объекта его нельзя отбросить с тем, чтобы не получить сообщения об ошибке.  Если мы хотим быть деликатнее, то можем использовать аргумент, если он задан, в противном случае откатиться на его значение "по-умолчанию".

ruby> **class Fruit**
    |**def initialize( k="apple" )**
    |**@kind = k**
    |**@condition = "ripe"**
    |**end**
    | **end**
**nil**
ruby> **f5 = Fruit.new "mango"**
**"a ripe mango"**
ruby> **f6 = Fruit.new**
**"a ripe apple"**

Вы можете использовать значения "по-умолчанию" для любых методов, а не только для

initialize
.  Список аргументов должен быть построен так, чтобы аргументы, которые могут иметь значения "по-умолчанию", шли последними.

Иногда полезно дать возможность инициализировать объект несколькими способами.  Хотя это и выходит за рамки данного руководства, Ruby поддерживает reflection объектов и список аргументов переменной длины, которые вместе дают возможность эффективной перезагрузки методов.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84баллов,
  • Очки рейтинга4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42баллов,
  • Очки рейтинга-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47баллов,
  • Очки рейтинга-6
Последние комментарии
ИМ
Игорь Максимов22 ноября 2024 г. 21:51
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 октября 2024 г. 23:37
Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 октября 2024 г. 17:19
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5 октября 2024 г. 16:51
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55 июля 2024 г. 20:02
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
b
blinds1211 февраля 2025 г. 16:08
Why Bamboo Blinds Are the Perfect Choice for Your Home When it comes to enhancing the aesthetics and functionality of your living space, choosing the right window treatment is crucial. Bamboo blinds have emerged as a popular choice for homeowners wh…
i
imperial313011 февраля 2025 г. 15:40
How to Select the Right Carpet for Your Bedroom Aesthetic Choosing the perfect carpet for your bedroom involves more than just picking a color or pattern you like. Carpets can transform the ambiance of your space, adding warmth, comfort, and style. How…
c
carpetstore11 февраля 2025 г. 15:13
How to Choose the Perfect Red Carpet for Any Event A red carpet instantly adds elegance and sophistication to any event, making guests feel like VIPs. Whether you're hosting a corporate gala, a wedding, a movie premiere, or a private party, choo…
g
gypsumpartition11 февраля 2025 г. 12:24
Why Choose Gypsum Wall Partitions for Your Interior Design? When it comes to interior design, creating functional and aesthetically pleasing spaces is essential. One of the most versatile and practical solutions for dividing spaces is gypsum wall partiti…
Дмитрий
Дмитрий3 февраля 2025 г. 16:24
Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…

Следите за нами в социальных сетях