Programmierung in Ruby

Der Leitfaden der Pragmatischen Programmierer

module Marshal

Index:

dump load restore


Die Marshal-Bibliothek konvertiert Zusammenstellungen von Ruby-Objekten in einen Byte-Stream, damit sie außerhalb des aktuell aktiven Scripts gespeichert werden können. Diese Daten können dann später wieder ausgelesen und die originalen Objekte wieder hergestellt werden. Dieses Marshaling wird ab Seite 272 beschrieben.

Einige Objekte können jedoch nicht abgespeichert werden: falls die apzuspeichernden Objekte Bindungen enthalten, Prozedur-Objekte, Instanzen der Klasse IO- oder Singleton-Objekte, wird ein TypeError ausgelöst.

Wenn eine Klasse eine spezielle Serialisierung benötigt (falls man etwa in ein spezielles Format serialisieren muss) oder falls sie Objekte enthält, die sonst nicht serialisierbar sind, kann man eine eigene Serialisierungs-Strategie implementieren, indem man die beiden Methoden _dump und _load definiert:

Methodden-Typ Signatur Rpckgabe
Instanz _dump(aDepth) Liefert einen String
Klasse _load(aString) Liefert ein wieder hergestelltes Object

Die Instanz-Methode _dump sollte ein String-Objekt zurückliefern, das alle nötigen Informationen enthält, um Objekte dieser Klasse wieder herzustellen, und alle referenzierten Objekte bis zu einer maximalen Tiefe von aDepth (der Wert -1 sollte die Prüfung auf die Tiefe abschalten). Die Klassen-Methode _load sollte einen String entgegen nehmen und ein Objekt dieser Klasse zurück liefern.

class methods
dump dump( anObject[, anIO] , limit=--1 ) -> anIO

Serialiseirt anObject und alle abhängigen Objekte. Falls anIO angegeben ist, werden die serialisierten Daten dort hin geschrieben, ansonsten werden die Daten als String zurück gegeben. Falls limit angegeben ist, wird die Abarbeitung von Unterobjekten bis zu dieser Tiefe vorgenommen. Falls limit negativ ist, wird keine Überprüfung der Tiefe vorgenommen.

class Klass
  def initialize(str)
    @str = str
  end
  def sayHello
    @str
  end
end

o = Klass.new("hello\n")
data = Marshal.dump(o)
obj = Marshal.load(data)
obj.sayHello » "hello\n"

load load( from[, aProc] ) -> anObject

Liefert das Ergebnis der Konvertierung der serialisierten Daten aus from in ein Ruby-Objekt (mit eventuellen Unterobjekten). from kann entweder eine Instanz von IO sein oder ein Objekt, das auf to_str reagiert. Falls proc angegeben ist, erhält es jedes gerade entserialisierte Objekt.

restore restore( from[, aProc] ) -> anObject

Ein Synonym für Marshal::load.


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Übersetzung: Jürgen Katins
Für das englische Original:
© 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0. That reference is available for download.
Diese Lizenz sowie das Original vom Herbst 2001 bilden die Grundlage der Übersetzung
Es wird darauf hingewiesen, dass sich die Lizenz des englischen Originals inzwischen geändert hat.
Für die deutsche Übersetzung:
© 2002 Jürgen Katins
Der Copyright-Eigner stellt folgende Lizenzen zur Verfügung:
Nicht-freie Lizenz:
This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.
Freie Lizenz:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".