Yaml and self-referential data

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:into_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:inadd’
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:ineach’
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:inmap’
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:inemit’
from /opt/local/lib/ruby/1.8/yaml.rb:387:in quick_emit' from /opt/local/lib/ruby/1.8/yaml/rubytypes.rb:107:into_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 forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs