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 |
|||
variable v |
|||
lappend res $i [set $i] |
|||
constructor {} { |
|||
set v "Hello world!" |
|||
} |
} |
||
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> |