opensas
opensas

Reputation: 63635

Default Value for Closure Parameters in Groovy

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

Upvotes: 0

Views: 1880

Answers (2)

chanwit
chanwit

Reputation: 3214

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

Upvotes: 2

David M. Karr
David M. Karr

Reputation: 15245

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

Upvotes: -1

Related Questions