» Главная
eXcode.ru » Статьи » Ruby
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 21







Инициализация объектов в 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 объектов и список аргументов переменной длины, которые вместе дают возможность эффективной перезагрузки методов.
К началу статьи





Добавил: MadvEXДата публикации: 2007-10-27 09:55:11
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 2984

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Как вы относитесь к интернет-магазинам?
Не доверяю
18% (16)
Ни разу не пользовался и не буду
16% (15)
Пользовался единожды
12% (11)
Пользуюсь регулярно
26% (24)
Пользовался бы, но нет денег
18% (16)
А что такие бывают?
2% (2)
Обычные магазины лучше!
8% (7)

Проголосовало: 91
Приходит програмист с работы, а на него жена набрасывается с кулаками:
- Негодяй! Я столько лет тебя кормила, поила, ублажала, а ты, паразит, мне изменяешь!
- ???
- Не прикидывайся! Звонил Витька, спрашивал адрес твоей Аськи!
Рейтинг: 4/10 (3)
Посмотреть все анекдоты

 
eXcode.ru » Статьи » Ruby