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).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Сложный rollover-эффект
Сложный rollover-эффект Под таким термином стоит понимать те случаи, когда в одном файле содержится несколько «динамических кнопок». Например, это может быть такое изображение: Рис. 4.2. Пример фонового изображения для сложного rollover-эффекта. Источник:
Более сложный случай
Более сложный случай Хотя это только базовый шаблон, для более сложных ситуаций может оказаться нелегко выяснить первопричину утечки. Распространенной практикой по написанию объектно-ориентированного JScript является расширение DOM-элементов путем инкапсуляции их внутри
Совет 13: Сложный пароль
Совет 13: Сложный пароль Хакеры начинают подбор пароля с проверки по специальным словарям, в которых содержатся миллионы паролей, когда-то где-то использованных. Так что все пароли, которые сходу придут вам в голову, скорее всего, в этих словарях уже есть — среди миллионов
Более сложный Web-сценарий
Более сложный Web-сценарий Теперь сделаем что-нибудь посложнее — заставим пункты списков, формирующих полосу навигации на Web-странице index.htm, менять цвет рамки при наведении на них курсора мыши. Так мы дадим посетителю понять, что данные элементы Web-страницы могут
Сложный поиск в Google
Сложный поиск в Google Сложный поиск предусматривает возможность использования особенностей языка поисковых запросов. Он является уникальным по своему синтаксису для каждой поисковой системы, но его возможности схожи.Вот наиболее популярные задачи, которые можно решить
Управление жизненным циклом и маршалинг
Управление жизненным циклом и маршалинг Ранее в этой главе обсуждались взаимоотношения между администратором заглушек и объектом. Администратор заглушек создается при первом вызове CoMarshalInterface для определенного идентифицированного объекта. Администратор заглушек
11.1.3. Более сложные конструкторы
11.1.3. Более сложные конструкторы По мере усложнения объектов у них появляется все больше атрибутов, которые необходимо инициализировать в момент создания. Соответствующий конструктор может оказаться длинным и запутанным, его параметры даже не будут помещаться на одной
11.2. Более сложные механизмы
11.2. Более сложные механизмы Не все в модели ООП, реализованной в Ruby, одинаково очевидно. Что-то сложнее, что-то применяется реже. Линия раздела для каждого программиста проходит в разных местах. В этой части главы мы попытались собрать те средства, которые не так просты или
17.1.2. Более сложное форматирование
17.1.2. Более сложное форматирование RDoc позволяет довольно точно управлять тем, какие части исходного текста документируются и как к ним следует относиться. Для этого служат специальные теги в комментариях (модификаторы документации).Одним из самых важных является тег