Frage

Ich habe diesen Code in einem Grails 1.0.4 Groovy Konsole:

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"

Welche gibt diese:

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

Bin ich etwas fehlt oder ist es ein Bug?

EDIT: Habe ich es wie folgt aus:

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
}

und jetzt funktioniert es! Shouln't das groovy Wert if-else-Konstrukt zurückkehren?

War es hilfreich?

Lösung

Das ist ein Bug / fehlende Funktion, die in Groovy 1.6.x wurde behoben, so dass es in Grails arbeiten würde 1.1+. Für Grails 1.0.x / 1.5.x Groovy müssen Sie explizit einen Wert von jedem, wenn Zweig zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top