Pergunta

Eu tenho esse código em um Grails 1.0.4 Groovy Console:

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"

Que retorna o seguinte:

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

Estou perdendo alguma coisa ou é um bug?

EDIT: Eu mudei assim:

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
}

E agora funciona! Shoul não é o construto groovy if-else retornar um valor?

Foi útil?

Solução

Esse é um recurso de bug/ausente que foi corrigido no Groovy 1.6.x, para que funcione no Grails 1.1+. Para Grails 1.0.x/groovy 1.5.x, você precisa retornar explicitamente um valor de cada ramificação IF.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top