views:

474

answers:

2

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".

A: 

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".

David M. Karr
+2  A: 

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

chanwit
you're right, groovy 1.6.0 works fine!
opensas