Ошибка оператора If-Else в Groovy 1.5.x/Grails 1.0.x
-
05-07-2019 - |
Вопрос
У меня есть этот код в консоли Grails 1.0.4 Groovy:
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"
Что возвращает это:
discovering device: 048123456
true == msisdn: 048123456 ==~ pattern: .*48123456
true == msisdn: 048123456 ==~ pattern: .*48123456
true == msisdn: 048123456 ==~ pattern: .*48123456
false == msisdn: 048123456 ==~ pattern: .*48123457
found: []
Я что-то упустил или это баг?
РЕДАКТИРОВАТЬ:Я изменил это так:
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
}
и теперь это работает!Разве классная конструкция if-else не должна возвращать значение?
Решение
Эта ошибка/отсутствующая функция была исправлена в Groovy 1.6.x, поэтому она будет работать в Grails 1.1+.Для Grails 1.0.x/Groovy 1.5.x вам необходимо явно возвращать значение из каждой ветки if.
Не связан с StackOverflow