Во-первых, вам нужно вызвать blur () в окне, которое находится сверху. Затем вызовите focus () в окне, которое вы хотите вызвать в начало.
Также обратите внимание, что в браузерах в наши дни есть блокирующие всплывающие окна, которые мешают вам это делать, и вы должны отключить их.
Нет, вы не можете прервать "каждый" без создания исключения. Скорее всего, вам понадобится классический цикл, если вы хотите, чтобы прерывание прерывалось при определенных условиях.
В качестве альтернативы вы можете использовать замыкание «find» вместо each и вернуть true, когда вы сделали бы перерыв.
Этот пример прерывается перед обработкой всего списка:
def a = [1, 2, 3, 4, 5, 6, 7]
a.find {
if (it > 5) return true // break
println it // do the stuff that you wanted to before break
return false // keep looping
}
Выводит
1
2
3
4
5
, но не выводит 6 или 7.
Также очень легко написать свои собственные методы итератора с настраиваемым поведением прерывания, которое допускает замыкания:
List.metaClass.eachUntilGreaterThanFive = { closure ->
for ( value in delegate ) {
if ( value > 5 ) break
closure(value)
}
}
def a = [1, 2, 3, 4, 5, 6, 7]
a.eachUntilGreaterThanFive {
println it
}
Также напечатано:
1
2
3
4
5
Нет, вы не может выйти из закрытия в Groovy без исключения исключения. Кроме того, вы не должны использовать исключения для потока управления.
Если вы обнаружите, что хотите вырваться из замкнутости, вам, вероятно, сначала следует подумать о том, почему вы хотите это сделать, а не о том, как это сделать. В первую очередь следует рассмотреть возможность замены рассматриваемого замыкания одной из (концептуальных) функций высшего порядка Groovy. Следующий пример:
for ( i in 1..10) { if (i < 5) println i; else return}
становится
(1..10).each{if (it < 5) println it}
становится
(1..10).findAll{it < 5}.each{println it}
, что также способствует ясности.Он гораздо лучше заявляет о намерениях вашего кода.
Потенциальный недостаток показанных примеров состоит в том, что итерация останавливается только в первом примере. Если у вас есть соображения по поводу производительности, вы можете сразу же остановить его.
Однако для большинства случаев использования, связанных с итерациями, вы обычно можете прибегнуть к одному из методов Groovy find, grep, collect, inject и т. Д. Обычно они берут некоторую «конфигурацию», а затем «знают», как выполнить итерацию за вас, так что вы действительно можете избежать императивного цикла, где это возможно.