about_Continue
Krótki opis
Opisuje sposób, w continue
jaki instrukcja natychmiast zwraca przepływ programu na początku pętli programu, switch
instrukcji lub trap
instrukcji.
Długi opis
Instrukcja continue
umożliwia zamknięcie bieżącego bloku sterowania, ale kontynuowanie wykonywania, a nie całkowite zamknięcie. Instrukcja obsługuje etykiety.
Etykieta to nazwa przypisana do instrukcji w skrypcie.
Korzystanie z funkcji continue in loops
Instrukcja bez etykiet natychmiast continue
zwraca przepływ programu for
na górę najbardziej wewnętrznej pętli kontrolowanej przez instrukcje , foreach
, do
, lub while
. Bieżąca iteracja pętli jest przerywana, a pętla kontynuuje następną iterację.
W poniższym przykładzie przepływ programu wraca na górę while
pętli, jeśli zmienna $ctr
jest równa 5. W związku z tym są wyświetlane wszystkie liczby z od 1 do 10 z wyjątkiem 5:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
W przypadku używania for
pętli wykonywanie jest kontynuowane w <Repeat>
instrukcji , a następnie w teście <Condition>
. W poniższym przykładzie nieskończona pętla nie wystąpi, ponieważ dekrementowanie $i
występuje po słuchu kluczowym continue
.
# <Init> <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
Write-Host -Object $i
if ($i -eq 5)
{
continue
# Will not result in an infinite loop.
$i--
}
}
Używanie oznaczonej etykietą kontynuowania w pętli
Instrukcja oznaczona etykietą continue
kończy wykonywanie iteracji i przekazuje kontrolę do docelowej otaczającej etykiety iteracji lub switch
instrukcji.
W poniższym przykładzie najbardziej wewnętrzna for
$condition
jest przerywana, gdy ma wartość Truefor
, a iteracja jest kontynuowana z drugą pętlą o wartości labelB
.
:labelA for ($i = 1; $i -le 10; $i++) {
:labelB for ($j = 1; $j -le 10; $j++) {
:labelC for ($k = 1; $k -le 10; $k++) {
if ($condition) {
continue labelB
} else {
$condition = Update-Condition
}
}
}
}
Używanie instrukcji continue w instrukcji switch
Instrukcja bez etykiety continue
w ramach kończy switch
switch
switch
wykonywanie bieżącej iteracji i przenosi kontrolkę na górę elementu w celu uzyskania następnego elementu wejściowego.
Gdy istnieje jeden element wejściowy, continue
kończy działanie całej switch
instrukcji.
Gdy dane switch
wejściowe są kolekcją, testuje switch
każdy element kolekcji. Element continue
kończy bieżącą iterację, a element switch
kontynuuje pracę z następnym elementem.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Używanie instrukcji continue w instrukcji pułapki
Jeśli końcowa instrukcja wykonywana w treści to , trap
błąd pułapki jest ignorowany w trybie dyskretnym, a trap
continue
wykonywanie jest kontynuowane wraz z następującą po nim instrukcji, która spowodowała błąd.
Nie używaj funkcji continue poza pętlą, przełącznikiem lub pułapką
Gdy continue
jest używany poza konstrukcją, która bezpośrednio go obsługuje (pętle, switch
, trap
), program PowerShell wyszukuje stos wywołań dla otaczającej konstrukcji. Jeśli nie można znaleźć otaczającej konstrukcji, bieżący obszar działania jest cichy przerywany.
Oznacza to, że funkcje i skryptycontinue
, które nieumyślnie używają konstrukcji zewnętrznej, która ją obsługuje, mogą przypadkowo zakończyć swoje wywołujące.
Użycie continue
wewnątrz potoku, takiego jak blok ForEach-Object
skryptu, nie tylko zamyka potok, ale potencjalnie kończy cały obszar działania.
Zobacz też
Opinia
Prześlij i wyświetl opinię dla