Я попробовал и SpiderMonkey и V8. С SpiderMonkey я не мог заставить ничего работать. Я не мог даже заставить примеры на mozilla.org компилировать.
V8 работавший out-of-the-box и я получили некоторый основной C++ <-> взаимодействие JavaScript, идущее довольно быстро. Существуют некоторые списки Google для людей, использующих V8, и я нашел, что большинство моих вопросов уже ответило там.
Вы не можете сделать это элегантно. Вы можете увидеть, как некоторые люди предлагают создать исключение, но это просто уродливое .
Вот некоторые обсуждения в списке рассылки об использовании каждого
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:
Относительно выхода из каждого цикла см.: можно ли «вырваться» из отличного замыкания
В основном вам нужно выбросить и исключить и поймать его. Ключевое слово "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"