Object serialization: Difference between revisions

→‎Tcl: Added correct implementation
(→‎{{header|Tcl}}: Converted to right template for known status of item)
(→‎Tcl: Added correct implementation)
Line 682:
 
=={{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 $iv
lappend res $i [set $i]
constructor {} {
set v "Hello world!"
}
setmethod resget {} {
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>
Anonymous user