Can someone help me? I'm trying to Marshal a class that includes
'Singleton' but all I get upon loading is an empty object.
e.g:
require 'singleton'
class SingleHash < Hash
include Singleton
end
o = SingleHash.instance
o[1] = 'hello world'
# Save the object to file
File.open( 'test', 'w' ) { |file| Marshal::dump( o, file ) }
# Leave
quit
# Restart ruby
# Redefine SingleHash class
o = nil
o = File.open( 'test' ) { |file| o = Marshal::load( file ) }
puts o[1] #=> nil ? Why didn't the contents get written to the file?
Apologies if it is obvious, but why didn't the contents of the class
get written to / reloaded from the file? Is there any way to make
this work?
"Tom Counsell" <tamc2@cam.ac.uk> schrieb im Newsbeitrag
news:87cd2dd2.0409210238.6414881c@posting.google.com...
Hello
Can someone help me? I'm trying to Marshal a class that includes
'Singleton' but all I get upon loading is an empty object.
e.g:
require 'singleton'
class SingleHash < Hash
include Singleton
end
o = SingleHash.instance
o[1] = 'hello world'
# Save the object to file
File.open( 'test', 'w' ) { |file| Marshal::dump( o, file ) }
# Leave
quit
# Restart ruby
# Redefine SingleHash class
o = nil
o = File.open( 'test' ) { |file| o = Marshal::load( file ) }
puts o[1] #=> nil ? Why didn't the contents get written to the file?
Apologies if it is obvious, but why didn't the contents of the class
get written to / reloaded from the file? Is there any way to make
this work?
Because you can have only one instance of a singleton class marshalling
and loading is disabled. You can use delegation, store the hash and
update with the hash if you like. Or you just don't make it a singleton,
which is probably more appropriate in this case.