Groovy 1.5.x / Grails 1.0.x If-Else Declaração Bug
-
05-07-2019 - |
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?
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