Книга: Программирование на языке Ruby
11.1.11. Метод allocate
11.1.11. Метод allocate
Редко, но бывает, что нужно создать объект, не вызывая его конструктор (в обход метода initialize
). Например, может статься, что состояние объекта полностью определяется методами доступа к нему; тогда не нужно вызывать метод new
(который вызовет initialize
), разве что вы сами захотите это сделать. Представьте, что для инициализации состояния объекта вы собираете данные по частям: начать следует с «пустого» объекта, а не получить все данные заранее, а потом вызвать конструктор.
Метод allocate
появился в версии Ruby 1.8, чтобы упростить решение этой задачи. Он возвращает «чистый», еще не инициализированный объект класса.
class Person
attr_accessor :name, :age, :phone
def initialize(n,a,p)
@name, @age, @phone = n, a, p
end
end
p1 = Person.new("John Smith",29,"555-1234")
p2 = Person.allocate
p p1.age # 29
p p2.age # nil
- 11.1.1. Применение нескольких конструкторов
- 11.1.2. Создание атрибутов экземпляра
- 11.1.3. Более сложные конструкторы
- 11.1.4. Создание атрибутов и методов уровня класса
- 11.1.5. Наследование суперклассу
- 11.1.6. Опрос класса объекта
- 11.1.7. Проверка объектов на равенство
- 11.1.8. Управление доступом к методам
- 11.1.9. Копирование объектов
- 11.1.10. Метод initialize_copy
- 11.1.11. Метод allocate
- 11.1.12. Модули
- 11.1.13. Трансформация или преобразование объектов
- 11.1.14. Классы, содержащие только данные (Struct)
- 11.1.15. Замораживание объектов
- Class-Allocated Slots
- SNAT target
- Работа со шрифтами TrueType и PostScript Type 1
- Выделение огромных объемов памяти
- How DHCP Works
- Measuring Key Buffer Usage
- Using the Query Cache
- 13.4.7. dmalloc
- 7.6.5. The Boot Server
- 8.3.1. Virtual Memory
- 9.3.4. Kernel Calls for Memory Management
- 9.4.4. Kernel Calls for Communication