Question

Is there some way to use default parameters values with closures in Groovy?

This is what I tried so far:

class Persona {
    String name

    Persona( String name ) {
        this.name = name
    }

    String salute( String salute = "Hola" ) {
        salute + ' ' + this.name
    }

}

Persona.metaClass.salute2 = { 
    String salute = "Hola" ->
        salute + ' ' + name
}

p = new Persona( 'john' )

print p.salute()
print p.salute2()

which gives me the following result:

Hola johnnull john

It seems like the call to salute2() is ignoring the salute default value "Hola".

Was it helpful?

Solution

Your code is working fine as you expected with Groovy 1.6-RC2.

OTHER TIPS

I don't believe Groovy has a direct way to do what you're asking.

The way to simulate this is for "salute2" to be a closure that defines another closure inside it (the one that currently concatenates the "salute" and "name" variables, where "salute" is a closure parameter)), and then calls that closure, sending the value "Hola".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top