Groovy - как выйти из каждого цикла?

Я попробовал и SpiderMonkey и V8. С SpiderMonkey я не мог заставить ничего работать. Я не мог даже заставить примеры на mozilla.org компилировать.

V8 работавший out-of-the-box и я получили некоторый основной C++ <-> взаимодействие JavaScript, идущее довольно быстро. Существуют некоторые списки Google для людей, использующих V8, и я нашел, что большинство моих вопросов уже ответило там.

25
задан Jack BeNimble 19 November 2009 в 22:10
поделиться

2 ответа

Вы не можете сделать это элегантно. Вы можете увидеть, как некоторые люди предлагают создать исключение, но это просто уродливое .

Вот некоторые обсуждения в списке рассылки об использовании каждого vs. для , и несколько человек говорят, что для предпочтительнее, поскольку каждый не может прервать итерацию.

Лучше всего, вероятно, перейти на цикл for и итерация:

for(def domain : records.children()) { // this may need some tweaking depending on types
    // do stuff
    if(condition) {
        break;
    }
}

Либо так, либо как вы сказали, возможно, используйте find или findAll , чтобы найти элемент, который вы ищете (следующий код перефразирован, у меня еще нет времени проверить его):

def result = records.children().find { domain -> domain.@domain_name == targetDomain }
result.children().each {
    // print stuff
}

Связанные Вопросы SO:

43
ответ дан 28 November 2019 в 20:40
поделиться

Относительно выхода из каждого цикла см.: можно ли «вырваться» из отличного замыкания

В основном вам нужно выбросить и исключить и поймать его. Ключевое слово "break" разрешено только внутри циклов, а не повторных "замыканий" (на самом деле блоков кода).

Вы можете использовать любой сложный код с "find", просто убедитесь, что вызываемая функция возвращает логическое значение. Например:

Boolean test(val) {
    println "Testing $val"
    return val == 1
}

def found = [3,4,5,1,6,3].find { test(it) }

println "Found $found"
4
ответ дан 28 November 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: