Is it possible to declare a closure to have type 'void' somehow?

currently not

Ok. What happens if the last statement in a closure is a call to a void method?

I would like to exploit this somehow like this:

def someMethod(Closure closure){

      if (closure has no return value, or is somehow defined to be 'void'){
        closure()
      } else {
              if (closure()){
                    doSomething()
              } else {
                    doSomethingElse()
              }
      }
}

normally it makes no sense to have a logic like this.

I wouldn't ask for it if it wouldn't make at least a bit of sense to me, but I'm maybe overwhelmed and want to define a WorldDomination API in a single method definition. So here you go:

interface TreeIterator extends Iterator {
    void prune()
}

Instances of this interface are used to walk over a tree structure and can be used like this:

while (iterator.hasNext()){
    Object next = it.next()
    doSomethingWith(next)
    if (!childrenAreInteresting(next)){
        it.prune() // this skips the subtree of the current element
    }
}

In groovy it would work somehow like this, with a closure:

iterator.each {
    doSomethingWith(it)
childrenAreInteresting(next) // the 'each' implementation takes the closure result and calls prune() if the result is false
}

But sometimes I want to walk the whole tree and forget about having to return a value:

iterator.each {
    doSomethingWith(it)
    true
}

I would like to get rid of the forced 'true' as the last statement.

Felix

Reply via email to