Pregunta

Tengo este código en una consola Groovy de Grails 1.0.4:

def devices = Device.getAll()

def found = devices.findAll {
    if(it?.localNumber && it?.areaCode){
        def pattern = ~".*${it.areaCode + it.localNumber}"
        def matches = "$msisdn" ==~ pattern
        println "$matches == msisdn: $msisdn ==~ pattern: $pattern"
        matches
    } else {
        false
    } // if-else
}

println "found: $found"

Lo que devuelve esto:

discovering device: 048123456
true == msisdn: 048123456 ==~ pattern: .*48123456
true == msisdn: 048123456 ==~ pattern: .*48123456
true == msisdn: 048123456 ==~ pattern: .*48123456
false == msisdn: 048123456 ==~ pattern: .*48123457
found: []

¿Me estoy perdiendo algo o es un error?

EDITAR: Lo cambié así:

def found = devices.findAll { 

    def matches = false
    if(it?.localNumber && it?.areaCode){
        def pattern = ~".*${it.areaCode + it.localNumber}"
        matches = "$msisdn" ==~ pattern
        println "$matches == msisdn: $msisdn ==~ pattern: $pattern"
    } else {
        matches = false
    } // if-else
    matches
}

y ahora funciona! ¿No debería la construcción groovy if-else devolver un valor?

¿Fue útil?

Solución

Esa es una característica de error / falta que se corrigió en Groovy 1.6.x, por lo que funcionará en Grails 1.1+. Para Grails 1.0.x / Groovy 1.5.x necesitas devolver explícitamente un valor de cada rama if.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top