Joel VanderWerf
6/11/2007 5:52:00 AM
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