Serializando objetos

Así como Java es capaz de serializar objetos, Ruby también puede, con la diferencia de que lo llama “marshalling”.

class Character def initialize(description, genre, tools) @description = description @genre = genre @ tools = tools end attr_reader :description, :genre, : tools end

Instanciamos los objetos y los guardaremos usando “Marshal.dump” en un fichero:

require 'character' p1 = Character.new('Mi personaje es alto y robusto', 'Masculino', ['pluma', 'computadora']) puts p1.description+' '+ p1.genre+' ' p1.tools.each do |w| puts w + ' ' end File.open('story', 'w+') do |f| Marshal.dump(p1, f) end

Luego usamos “Marshal.load” para recuperarlos:

require 'character' File.open('story') do |f| @p1 = Marshal.load(f) end puts @p1.description+ ' ' + @p1.genre + ' ' @p1.tools.each do |w| puts w + ' ' end

Recuerda que Marshal solo serializa datos estructurados y no puede serializar código (como los Proc) o recursos utilizados por otros procesos, como los que estén conectados a bases de datos.

Si intentas serializar un fichero, Marshal te regresará un error.