From: Joel VanderWerf Date: 2007-06-11T14:52:09+09:00 Subject: Re: Prettier solution to circular dependency Helder Ribeiro wrote: > This is an aesthetic problem: I have a method in a module, and I want > to include it in three different classes (they're all in the same > file). This method refers itself to one of those classes. So i have to > include the module into the classes, but for the method to be parsed, > one of those classes needs to be already defined. > You can define the Element class at the top, and then reopen it later to include the module and define your methods. Just make sure that if Element is a subclass of something, the _first_ "class Element" must have the " < SuperClass". But in this case all you have to do is add these lines: class Element end > module ElementFactory > def element_factory(what) > (...) > Element.new > end > end > > class Element > include ElementFactory > (...) > end > > class Document > include ElementFactory > (...) > end > > class ElementCollections > include ElementFactory > (...) > end > > > So for this class Element there's a circular dependency and, as ruby > does single-pass parsing, this can't work. What I've done so far is to > replace the explicit reference to Element in the module instance > method by a call to Object.const_get(:Element) so that when it's > called, Element will already be defined. But this looks a bit ugly. > isn't there a better way to solve this? > > The circular dependency hints at not having the module at all and just > putting the instance method element_factory() into Element itself but > there are those other two classes that include it, so I can't do that. > > Thanks a lot for any ideas! :-) > > > Cheers, > > Helder > > -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407