10.2.2. Более сложный маршалинг

10.2.2. Более сложный маршалинг

Иногда мы хотим настроить маршалинг под свои нужды. Такую возможность дают методы _load и _dump. Они вызываются во время выполнения маршалинга, чтобы вы могли самостоятельно реализовать преобразование данных в строку и обратно.

В следующем примере человек получает 5-процентный доход на начальный капитал с момента рождения. Мы не храним ни возраст, ни текущий баланс, поскольку они являются функциями времени.

class Person

 attr_reader :name

 attr_reader :age

 attr_reader :balance

 def initialize(name,birthdate,beginning)

  @name = name

  @birthdate = birthdate

  @beginning = beginning

  @age = (Time.now - @birthdate)/(365*86400)

  @balance = @beginning*(1.05**@age)

 end

 def marshal_dump

  Struct.new("Human",:name,:birthdate,:beginning)

  str = Struct::Human.new(@name, @birthdate, @beginning)

  str

 end

 def marshal_load(str)

  self.instance_eval do

   initialize(str.name, str.birthdate, str.beginning)

  end

 end

 # Прочие методы...

end

p1 = Person.new("Rudy",Time.now - (14 * 365 * 86400), 100)

p [p1.name, p1.age, p1.balance] # ["Rudy", 14.0, 197.99315994394]

str = Marshal.dump(p1)

p2 = Marshal.load(str)

p [p2.name, p2.age, p2.balance] # ["Rudy", 14.0, 197.99315994394]

При сохранении объекта этого типа атрибуты age и balance не сохраняются. А когда объект восстанавливается, они вычисляются заново. Заметьте: метод marshal_load предполагает, что объект существует; это один из немногих случаев, когда метод initialize приходится вызывать явно (обычно это делает метод new).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Управление жизненным циклом и маршалинг

Из книги Программирование на языке Пролог автора Клоксин У.

Управление жизненным циклом и маршалинг Ранее в этой главе обсуждались взаимоотношения между администратором заглушек и объектом. Администратор заглушек создается при первом вызове CoMarshalInterface для определенного идентифицированного объекта. Администратор заглушек


Сложный rollover-эффект

Из книги Интернет. Новые возможности. Трюки и эффекты [litres] автора Баловсяк Надежда Васильевна

Сложный rollover-эффект Под таким термином стоит понимать те случаи, когда в одном файле содержится несколько «динамических кнопок». Например, это может быть такое изображение: Рис. 4.2. Пример фонового изображения для сложного rollover-эффекта. Источник:


Более сложный случай

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Более сложный случай Хотя это только базовый шаблон, для более сложных ситуаций может оказаться нелегко выяснить первопричину утечки. Распространенной практикой по написанию объектно-ориентированного JScript является расширение DOM-элементов путем инкапсуляции их внутри


1.10. Сложный рефлекс

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир


Сложный поиск в Google

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Сложный поиск в Google Сложный поиск предусматривает возможность использования особенностей языка поисковых запросов. Он является уникальным по своему синтаксису для каждой поисковой системы, но его возможности схожи.Вот наиболее популярные задачи, которые можно решить


10.2.1. Простой маршалинг

Из книги Выжить в цифровом мире. Иллюстрированные советы от «Лаборатории Касперского» автора Дьяков Михаил


11.1.3. Более сложные конструкторы

Из книги автора

11.1.3. Более сложные конструкторы По мере усложнения объектов у них появляется все больше атрибутов, которые необходимо инициализировать в момент создания. Соответствующий конструктор может оказаться длинным и запутанным, его параметры даже не будут помещаться на одной


11.2. Более сложные механизмы

Из книги автора

11.2. Более сложные механизмы Не все в модели ООП, реализованной в Ruby, одинаково очевидно. Что-то сложнее, что-то применяется реже. Линия раздела для каждого программиста проходит в разных местах. В этой части главы мы попытались собрать те средства, которые не так просты или


17.1.2. Более сложное форматирование

Из книги автора

17.1.2. Более сложное форматирование RDoc позволяет довольно точно управлять тем, какие части исходного текста документируются и как к ним следует относиться. Для этого служат специальные теги в комментариях (модификаторы документации).Одним из самых важных является тег


Более сложный Web-сценарий

Из книги автора

Более сложный Web-сценарий Теперь сделаем что-нибудь посложнее — заставим пункты списков, формирующих полосу навигации на Web-странице index.htm, менять цвет рамки при наведении на них курсора мыши. Так мы дадим посетителю понять, что данные элементы Web-страницы могут


Совет 13: Сложный пароль

Из книги автора

Совет 13: Сложный пароль Хакеры начинают подбор пароля с проверки по специальным словарям, в которых содержатся миллионы паролей, когда-то где-то использованных. Так что все пароли, которые сходу придут вам в голову, скорее всего, в этих словарях уже есть — среди миллионов