Hi,

I found that if I add a static iterator() method to a class:

MyClass.class.metaClass.static[iterator] = { calculateTheIterator() }

I can use MyClass.each/grep and all these wonderful groovy methods. This is
for an EMF data model, where users often want to know stuff about objects
of a certain type in their model.

Now, obviously calculateTheIterator() needs some magic. What I currently do
is I wrap things into a closure:

withContext(context) {
   SomeClass.each { ... } SomeOtherClass.grep { }
}

the withContext method writes the context into a global static field
somewhere, and the calculateTheIterator() method just reads that value and
uses it to calculate the result using domain-specific knowledge. I wonder
if there is a way to avoid that global static variable.

Another question I have is, that I currently add the static iterator to ALL
classes of my domain separately:

    for (Class c : allTheClasses) {
         c.metaClass.static[iterator] = { calculateTheIterator () }
    }

Is there a better way to do this?


Thanks,
Felix

-- 
Linux. The choice of a GNU generation.

Reply via email to