# Yaml and self-referential data

**URL:** <https://www.ruby-forum.com/t/yaml-and-self-referential-data/86027>\
**Category:** Ruby\
**Created:** [February 19, 2007, 6:55am UTC](https://www.ruby-forum.com/t/yaml-and-self-referential-data/86027 "2007-02-19T06:55:48Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hans\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a587f6/32.png) [@Hans\_F](https://www.ruby-forum.com/u/Hans_F)\
**Post date:** [February 19, 2007, 6:55am UTC](https://www.ruby-forum.com/t/yaml-and-self-referential-data/86027/1 "2007-02-19T06:55:48Z")

</div>

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?
