Object serialization: Difference between revisions

Content added Content deleted
(→‎{{header|Tcl}}: Converted to right template for known status of item)
(→‎Tcl: Added correct implementation)
Line 682: Line 682:


=={{header|Tcl}}==
=={{header|Tcl}}==
''This example uses an experimental package, available from [http://wiki.tcl.tk/23444 The Tcler's Wiki].
{{incorrect|tcl|In particular, it is known to be incomplete; more will be forthcoming in a few days...}}
<lang tcl>package require TclOO::serializer 0.1
A limited solution to serialize the class name and scalar member variables in TclOO:

<lang Tcl>define oo::object method serialize {{pat *}} {
# These classes are inspired by the Perl example
set res [list class [info object class [self]]]
oo::class create Greeting {
foreach i [info object vars [self] $pat] {
superclass oo::serializable
my variable $i
variable v
lappend res $i [set $i]
constructor {} {
set v "Hello world!"
}
}
set res
method get {} {
return $v
}</lang>
}
}
oo::class create SubGreeting {
superclass Greeting oo::serializable
variable v
constructor {} {
set v "Hello world from Junior!"
}
}
oo::class create GreetingsHolder {
superclass oo::serializable
variable o1 o2
constructor {greeting1 greeting2} {
set o1 $greeting1
set o2 $greeting2
}
method printGreetings {} {
puts [$o1 get]
puts [$o2 get]
}
destructor {
$o1 destroy
$o2 destroy
}
}

# Make some objects and store them
GreetingsHolder create holder [Greeting new] [SubGreeting new]
set f [open "objects.dat" w]
puts $f [oo::serialize holder]
close $f

# Delete the objects
holder destroy

# Recreate the objects from the file and show that they work
set f [open "objects.dat" r]
set obj [oo::deserialize [read $f]]
close $f
$obj printGreetings</lang>