Groovy 1.5.x / Grails 1.0.x Ошибка оператора If-Else - PullRequest
2 голосов
/ 09 сентября 2009

У меня есть этот код в Groovy консоли 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"

Что возвращает это:

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 возвращать значение?

1 Ответ

2 голосов
/ 09 сентября 2009

Это ошибка / отсутствующая функция, которая была исправлена ​​в Groovy 1.6.x, поэтому она будет работать в Grails 1.1+. Для Grails 1.0.x / Groovy 1.5.x вам необходимо явно возвращать значение из каждого if branch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...