Forum: Ruby yaml and self-referential data

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F0a85fe10cdceda395c89279bb0850f9?d=identicon&s=25 Hans Fugal (Guest)
on 2007-02-19 06:55
(Received via mailing list)
I have a data structure (Arrays and Hashes mixed in a soup) that is
fairly self-referential, i.e. it has cycles. When I try to do
foo.to_yaml, it complains:

/opt/local/lib/ruby/1.8/yaml.rb:382:in `quick_emit': stack level too
deep (SystemStackError)
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:164:in `to_yaml'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:41:in
`node_export'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:41:in `add'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:41:in `to_yaml'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:40:in `each'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:40:in `to_yaml'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:39:in `map'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:39:in `to_yaml'
          ... 6502 levels...
         from /opt/local/lib/ruby/1.8/yaml.rb:387:in `emit'
         from /opt/local/lib/ruby/1.8/yaml.rb:387:in `quick_emit'
         from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:107:in `to_yaml'
         from ./yaml.rb:43

However, on the small testing scale it works fine:

---
- &id004
   name: foo
   famc: &id002
     parents:
     - &id001
       name: bar
       fams: *id002
       famc: &id005
         children:
         - *id001
     - &id003
       name: baz
       fams: *id002
       famc: &id006
         children:
         - *id003
     children:
     - *id004
- *id001
- *id003
- *id002
- *id005
- *id006

Is there anything I can do to help the to_yaml method along? Maybe tell
it to be eager about using aliases or something?
This topic is locked and can not be replied to.