itsme213 wrote:

> I want to build such structures lazily, but be lazy only when the laziness
> is needed i.e. not for :f0=>x, or [x, y, ...], or y.f1. And I would like to
> force resolution of (selected or all) unresolved references either:
> a) at a time of my choosing (raising exceptions if needed), or
> b) incrementally whenever a given reference becomes resolvable, or
> c) when something is done with that reference i.e. some method invoked on it
> (line 6).

I'm not sure if I'm overlooking something, but I'd use blocks for this.
E.g.

foo = LazyStruct.new
bar = LazyStruct.new
foo.bar { bar.foo }
bar.foo = 5

Pardon the poor example. Does this make sense?